【发布时间】:2021-07-01 10:19:20
【问题描述】:
我有一个有 600 万行的表,我需要查找六列来选择项目。所以我创建了一个包含六列的索引。
更改索引中列的顺序会影响查询速度吗?
查询速度是否取决于每列具有的唯一项的数量?还是列上条件的可能结果总数?
我尝试重新排序索引中的列,查询速度似乎发生了一些重大变化
表:pic_tag_relations
列:
- tag_id (int) (1-1,000,000)(基数:最低)
- contrast_score(float) (0-24)
- quality_score (float) (0-10)
- pic_ratio_type(tinyint) (0/1/2)
- is_okay (tinyint) (0/1)
- already_used_count (integer) (1-10)
查询:
select * from pic_tag_relations where tag_id in ($all_tag_ids) && contrast_score>2.5 && quality_score>3 && is_okay=1 && pic_ratio_type='2' && already_used_count
【问题讨论】:
-
最好先拥有最大基数的索引。
-
是的,它确实有很强的效果。请将您将要运行的查询添加到问题中。
-
我认为更具体的字段应该首先出现在索引中(但有些人可能不同意)。
-
我的第一反应是:索引就是索引,不管它是如何构建的。但是the manual begs differ:“如果在索引定义中以正确的顺序指定列,单个复合索引可以加速同一张表的多种查询。”
-
@KIKOSoftware 因为在顺序中跳过某些列的查询将无法利用完整索引。但问题是关于使用所有列的查询。