SQL:哪个索引对于like-select查询最合理?

时间:2014-10-02 11:15:51

标签: mysql sql

我对数据库索引不太熟悉。我有一个表,我假设缺少一个索引来以可接受的速度执行我的查询。

我的表格如下:

+---------+--------------+------+-----+---------+-------+
| Field   | Type         | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| word    | varchar(64)  | NO   | MUL |         |       |
| feature | varchar(128) | NO   | MUL |         |       |
| sig     | double       | NO   | MUL | 0       |       |
+---------+--------------+------+-----+---------+-------+

我想选择featureordered by sig来获取word s

我的查询是

SELECT word from MyTable where feature like 'walk#%' order by sig

哪个索引最能加快查询速度? 功能+ sig的索引? 要么 word + feature + sig的索引?

有人可以帮我解释一下,为什么某个键比另一个更好?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

仅在Feature上使用Btree-index

 ALTER TABLE MyTable ADD INDEX myIndex USING BTREE (feature)

col word的索引对MySQL无效,因为它只是在此点获取结果。 col sig也是如此。

如果匹配器不以通配符开头,则B-Tree索引最适用于LIKE操作(请参阅MySQL documentation)。标准是HASH指数,它们在等/不等列操作中效果最佳。

答案 1 :(得分:0)

对于Oracle(不确定SQL Server)

我不认为需要索引单词,因为它未包含在查询的谓词列表中。因此,肯定会建议使用功能的索引(根据Benni关于前导通配符的评论,需要注意)。对sig的索引可能有助于排序。如果sig列已编制索引,则将按索引的顺序返回结果,并且不需要在查询中添加顺序