假设表T有三列,
id int not null auto_increment,
my_id int,
name varchar(200).
并且查询是"从T中选择*,其中my_id在(var_1,var_2,...,var_n)和name =' name_var'"。
以下两个指数之间是否有任何表现差异?
答案 0 :(得分:1)
•Index1:(my_id,name) •Index2 :( name,my_id)。
是的,在查询性能方面,上面两个略有不同。
总是,最左边的字段是决定索引效率和选择性的最重要字段。 index应建立在WHERE,ORDER BY和GROUP BY子句中经常使用的列上。 希望这有帮助!
答案 1 :(得分:0)
在复合索引中,应首先显示要搜索的列。因此,如果您要搜索一组id
值,则需要id
首先显示在索引中。
但如果id
是主键并且您使用SELECT *
子句来检索整行,则添加另一个索引没有意义。表格的组织方式,行的所有数据都显示为每个id
值。所以只需使用主键上的索引。
tl; dr:(id,name)
和(name,id)
都无法帮助您进行此查询。
答案 2 :(得分:0)
通常,最好使用INDEX
条WHERE
开始col = const
。一个范围可以持续到最后。 IN
有点像=
,类似于范围。因此,这是最好的:
INDEX(name, id)
这样想。索引是一个有序列表。使用此索引,它将从name=...
开始,然后必须扫描或跳过具有该名称的所有ID。
我怀疑PRIMARY KEY
不是(id)
。如果是的话,你为什么要检查这个名字?