在MySql中,我想定位其中一列中的字符串值以查詢字符串開頭(或相同)的記錄。該列使用適當的整理順序編入索引。儘管列上沒有全文搜索索引。在MySql中,找到具有給定前綴的字符串
一個很好的解決方案:
使用指數在列。需要遍歷表中所有記錄的解決方案不夠好(表中有數百萬條記錄)
使用字符串處理任何字符值。某些列值包含標點符號。查詢字符串也可能。請記住,如果你的解決方案包含正則表達式字符或類似的。這些字符串是UTF-8編碼的,但如果您的解決方案僅適用於ASCII,它仍然可能有用。
在這一點上我最接近的是
SELECT * FROM TableName WHERE ColumnName BETWEEN query AND <<query+1>>
凡<<query+1>>
是預先計算的,以字典順序遵循排序順序query
。例如,如果query
是「o hai」,那麼<<query+1>>
是「o haj」。
完美 - 謝謝。 EXPLAIN確實表示一個範圍查詢。 LIKE的MySql文檔表明只有以下字符需要轉義:'%','_':http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like 。 – 2010-01-06 07:19:05
我可能會提到,在索引基數確實需要更新的情況下,'ANALYZE TABLE'在理論上比'OPTIMIZE TABLE'快。儘管如此,表格在這段時間仍然處於鎖定狀態。在我的一張600萬行的桌子上運行ANALYZE TABLE花了好一個小時。 – Crast 2010-01-06 07:39:15