2010-08-26 22 views
2

我有一個VARCHAR(384)存儲電子郵件的MyISAM表,我想檢查當電子郵件存在,但該指數長度限制爲VARCHAR場333字節 (因爲我使用utf8(1000字節/ 3字節))。指數與384的長度在MySQL數據庫中

那麼什麼是最好的方式來搜索是否存在指定的電子郵件,使用FULLTEXT索引或在BINARY(16)(帶有衝突檢查)中使用電子郵件md5-hash創建另一個字段?

[編輯]使用1M記錄

試驗。

Fulltext index: ~300 ms 
333 length index: ~15 ms 
binary(16) md5-hash: ~15 ms 

所以我認爲,最好的選擇是在性能上的第二場,但是......第二場=更大的桌子,這是不利於性能或存儲。因此,在電子郵件大小不超過150個字符的真實場景中,VARCHAR(384)中的長度爲150的索引就足夠了。

+0

我知道我可以有一個長度爲150的字段來存儲電子郵件。但是我玩的是假設的表格,384是電子郵件的最大長度。 – Wiliam 2010-08-26 08:46:38

回答

1

在上週,我添加了10萬封不同的電子郵件到我的數據庫(緩慢的一週)。

最長的是45個字符。鐘形曲線峯值爲21-22個字符。

因此,如果您願意,最多可以存儲384個字符,但僅索引前45個字符。即使在極少數情況下索引返回重複數據時,從磁盤讀取底層記錄的額外I/O也不會殺死您。

祝你好運。