我对数据库索引不太熟悉。我有一个表,我假设缺少一个索引来以可接受的速度执行我的查询。
我的表格如下:
+---------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+-------+
| word | varchar(64) | NO | MUL | | |
| feature | varchar(128) | NO | MUL | | |
| sig | double | NO | MUL | 0 | |
+---------+--------------+------+-----+---------+-------+
我想选择feature
行ordered by sig
来获取word
s
我的查询是
SELECT word from MyTable where feature like 'walk#%' order by sig
哪个索引最能加快查询速度? 功能+ sig的索引? 要么 word + feature + sig的索引?
有人可以帮我解释一下,为什么某个键比另一个更好?
感谢您的帮助
答案 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列已编制索引,则将按索引的顺序返回结果,并且不需要在查询中添加顺序。