2013-10-14 34 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