2011-10-26 61 views
0

我正在製作字典web應用程序。用戶將搜索單詞。這樣做會更快嗎?什麼字段結構會更適合MySQL中的定義表?

SELECT * from definition WHERE word LIKE "house"; 

或...

SELECT * from definition WHERE word_hash LIKE md5("house"); 

在第二個例子,我存儲的MD5()在word_hash字段字的值。當然,「word」和「word_hash」是索引。

更新:有時,這個詞場可能超過1個字。例如:聖布魯

+0

我將承擔詞搜索將是在大多數情況下(如果它的長度比哈希短)更快 –

+0

如果由於某種原因,會有什麼樣的定義,超過1個字?例如:SacréBleu(法語) – andufo

+0

如果我的單詞搜索理論(以及我假設任何加速不會很重要)是正確的,那麼這個單詞仍然更快。那個/那些單詞的散列是'80d42badd4395b5733ee6e594773776e',比組合單詞長一點。此外,你正在增加一個哈希的代價,而版本#1沒有。 –

回答

1

跳過LIKE完全會更快。新增的word小寫版本爲word_lc,指數word_lc,然後執行:

select * from definition where word_lc = lower(word_you_want) 

沒有任何%_通配符使用像只是一個不區分大小寫平等的測試,所以你應該直接去區分大小寫的比較是可以並將利用索引。另外,像往常一樣,說出你的意思,這樣電腦就可以做你想做的事情。

+0

偉大的提示。如果用戶輸入「houze」,那麼MySQL有沒有辦法找到類似的匹配來推薦用戶更正? – andufo

+1

@andufo:LIKE不會對你有太大的幫助,'LIKE md5(...)'的幫助會更少。也許看看MySQL的全文搜索或者做一些「mysql模糊搜索」搜索。 –