2011-11-18 68 views
2

我有一個包含300 000條記錄的數據庫表。最常見的查詢是:LIKE查詢的列優化

SELECT [..] WHERE `word` LIKE 'userInput%'; 

當前列類型爲varchar(50) UNIQUE。我想知道是否有一種方法來優化此特定查詢的列?

更新2011 11月19日格林尼治標準時間00:00:

mysql> EXPLAIN SELECT `word_id`, `word` FROM `words` WHERE `word` LIKE 'bar%' 
    -> ; 
+----+-------------+-------+-------+---------------+------+---------+------+------+--------------------------+ 
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra     | 
+----+-------------+-------+-------+---------------+------+---------+------+------+--------------------------+ 
| 1 | SIMPLE  | words | range | word   | word | 152  | NULL | 435 | Using where; Using index | 
+----+-------------+-------+-------+---------------+------+---------+------+------+--------------------------+ 
+1

確保「word」上存在索引。你可以通過'explain select ... where'來驗證它是否被優化了;' –

+0

對於只有300K的記錄,如果你的索引更接近,你應該看不到任何延遲。你擔心的原因是什麼? – dkretz

回答

3

只要你使用的是「開始」與類型通配符搜索,就是一個標準的指數應該工作在字的罰款。

它只有當你開始進入一個「包含」通配符搜索,你開始有索引的難題。

當然,附加一個解釋計劃將有助於...

基於解釋計劃,它看起來像你做的一樣好,你可以做。這表明它正確使用了索引,並沒有執行任何全表掃描或文件分類。