2013-04-09 68 views
1

由於MYISAM每次都鎖定整個表,因此我正在考慮將MYISAM錶轉換爲InnoDB。但是,INNODB要求唯一主鍵位於767字節以內。如果唯一鍵很長,則將MYISAM錶轉換爲INNODB

所以,我收到此錯誤: -

#1071 - Specified key was too long; max key length is 767 bytes 

我的唯一鑰匙是有點冗長。那麼,將我的表格轉換爲INNODB的最佳方式是什麼?

這裏是描述我的表

enter image description here

感謝

+0

請顯示錶定義。你使用的是什麼排序規則? – fancyPants 2013-04-09 14:22:12

+0

@tombom我的排序規則是utf8_unicode_ci。我添加了我的表格結構的屏幕截圖,作爲對 – 2013-04-11 04:20:06

回答

1

假設的截圖看到的關鍵是你要做的,爭議的關鍵這裏是query_id截圖。作爲300個字符的UTF8列,它最終僅使用900個字節。

您需要將索引限制爲該列的一部分 - 也就是說,前100個字符?

DROP INDEX query_id ON tablename 
CREATE INDEX query_id ON tablename (query_id, position, prod(100)) 
+0

問題的更新。什麼是創意!非常感謝 !它爲我工作:) – 2013-04-11 07:30:24

0

之前轉換表,調整其順序,使主鍵列是爲了

> ALTER TABLE tablename ORDER BY 'primary_key_column'; 

這將預先安排表,以便它可以快速無需重的轉換在MySQL中需要安排。然後,只需更改表引擎:

> ALTER TABLE tablename ENGINE = INNODB; 
+0

看來你還沒有正確閱讀這個問題 – 2014-02-12 03:48:05