2013-10-14 31 views
0

我有一个日期维度表与炭(7)字段称为与它的指标year_month_number指数如下:MyISAM的炭(7)字段具有与长密钥长度

ALTER TABLE `dim_date` add INDEX `year_month_number` (`year_month_number` ASC); 

有数据在它如“2013-06”或“2013-07”。

IM具有性能问题,因此没有一个解释,

'1', '简单', 'EFFECTIVE_DATE', 'REF', 'PRIMARY,year_month_number', 'year_month_number', '22', “常量”,“29”,“使用其中”

它好像key_len = 22,任何人都可以解释为什么它不是7(在this post建议)?我曾尝试删除并重新创建索引,

+0

它是一个'VARCHAR(7)'或'一个CHAR(7)'? –

回答

1

不知道为什么它显示22,也许有些编码问题 - 它是CHAR(7)二进制?

反正 - 变化领域常用的INT,在那里你会YYYYMM存储为数字,这将是只有4个字节

+0

nope,它是一个bog标准字符(7),不是二进制的,不是varchar。我已经将它改为中等诠释。这似乎是做的工作,虽然现在的关键字大小是4而不是3,如下所示:[链接](http://dev.mysql.com/doc/refman/5.0/en/integer-types.html)。 – marengaz

+0

索引仅使用字/ DWORD对准结构,因为它们是更快,所以通常它们可以采取仅偶数长度(如4个字节,8个字节),3是发现奇数 –

+0

回答!为什么'key_len = 22'而不是'7'。每个'char'需要3个字节。 'varchar'数据类型需要2个字节来存储字符串的长度。 [参考](http://dev.mysql.com/doc/refman/5.0/en/column-count-limit.html) – marengaz