2012-10-02 64 views
0

我試圖指數在MySQL的InnoDB表中的文本字段和看起來像哈希索引是去這樣的方式:如何索引MySQL中的innodb文本?

CREATE INDEX teksti_index USING HASH ON maili_teksti(teksti(100)); 

那麼,這是否意味着MySQL的需要領域的前100個字符並計算散列(然後對散列進行索引)。如果我將數字100更改爲200,指數的大小是否相同?

...這是去,如果我想優化這種命令的正確方法:

SELECT count(*) from teksti where teksti='random text'; 

回答

3

CHARVARCHARTEXT列處理(因爲你正在處理TEXT) ,創建索引時分配的前綴長度將使用的前X個字符創建一個哈希值 - 正是您的想法(source)。

當與標準索引處理,改變編入索引還應更改索引的大小的數據的大小(即 - 添加字符應增加索引;去除應該減少)。在處理HASH索引時,這是一個猜測,因爲我找不到關於它的特定文檔,所以我認爲它由於散列算法的性質而增加(至少,不是太多)

散列索引僅適用於=<=>運營商,所以teksti='random text'你的樣品的使用非常適合這種類型的索引(source)。如果您需要使用其他運營商,例如LIKE,<>運營商,您可能不得不考慮切換到B-TREE索引。

作爲完整的備選方案,您可以查看FULLTEXT索引。這提供了大量的匹配能力,雖然它相當強大,並且可能太多了Full-Text Search Functions頁面上的文檔指出,FULLTEXT只能與MyISAM配合使用,然而,Section 14.2.4.12.3上的InnoDB Table and Index文檔頁面覆蓋了與InnoDB的索引FULLTEXT - 因此,這可能會或可能不可用= P。

+0

非常感謝您的專業和深刻的回答!我感到高興和安全,現在繼續:) – viljun