2011-11-18 100 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

只要你使用的是“开始”与类型通配符搜索,就是一个标准的指数应该工作在字的罚款。

它只有当你开始进入一个“包含”通配符搜索,你开始有索引的难题。

当然,附加一个解释计划将有助于...

基于解释计划,它看起来像你做的一样好,你可以做。这表明它正确使用了索引,并没有执行任何全表扫描或文件分类。