暂无图片
select * from tb where a = x and b = x and c =x 怎么考虑究竟是 a b c 3 个索引还是abc联合索引呢?
我来答
分享
QIU飞
2021-10-09
select * from tb where a = x and b = x and c =x 怎么考虑究竟是 a b c 3 个索引还是abc联合索引呢?
select * from tb where a = x and b = x and c =x 怎么考虑究竟是 a b c 3 个索引还是abc联合索引呢?
我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
赵勇

索引有缺点:索引会额外占用空间,同时,索引中包含的列越多,索引的体积越大,而且,相关列上的值有变化时,也就需要做索引维护。所以,需要综合考虑,在提升查询性能的同时,还能兼顾索引的维护成本(空间和维护开销)。因此,我们应该在选择性最好的列上创建索引,如果ABC三列中存在主键列或者近似主键列选择性的列或列的组合,可以考虑在这些列上创建索引。如果是多列索引,还要考虑谁在前,谁在后。这个需要具体问题,具体分析了。

暂无图片 评论
暂无图片 有用 1
暂无图片
chengang

从这个语句看。 如果有(a,b,c) 这三个字段的联合索引。是能用上联合索引的。


理解怎么使用联合索引。联合索引能使用几个即(key_len)需要了解B+tree 结构及最左匹配原则,简单的说,最左开始匹配。遇到范围查找即终止使用后面的字段了。

暂无图片 评论
暂无图片 有用 0
薛晓刚

如果你允许只用abc任意一个都可以作为过滤条件,那么就你建立3个单独的

如果你a是必选,那么ab ac就是联合的

暂无图片 评论
暂无图片 有用 0
三笠丶
暂无图片

看执行效率吧,你可以做个测试,实践检验真理。

分别加三个索引,然后看执行计划和效率。

只创建联合索引,然后看执行计划和效率。

自己测试过之后,比别人的一面之词有用的多。

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏