mysql联合索引相关问题

.
.
.

mysql什么情况下需要建联合索引,而不是每个字段单独建索引


在MySQL中,建立联合索引是在多个列上创建一个索引,而不是每个字段单独创建索引。
使用联合索引可以在以下情况下提供性能优势:

1. **多列查询:**
当你经常需要在多个列上进行查询时,联合索引可以显著提高查询性能。
通过将这些列组合在一个联合索引中,数据库可以更有效地过滤数据,并且避免了多次单独查找的开销。
----------------------------------------------

2. **覆盖索引:**
联合索引有时可以成为"覆盖索引"。如果你的查询只需要联合索引中的列,
而不需要回表读取实际的数据行,那么这个查询将非常高效。
因为覆盖索引减少了对实际数据行的访问,从而提高了查询性能。
----------------------------------------------

3. **查询排序和分组:**
当你的查询涉及到在联合索引列上进行排序或分组时,
联合索引的效果会更好。因为数据在索引中是有序的,
这样MySQL可以更快速地完成排序和分组操作。
----------------------------------------------

4. **避免冗余索引:**
在某些情况下,多个单独的索引可能会造成冗余,
并占用更多的磁盘空间。使用联合索引可以减少索引的数量,避免这种冗余。
----------------------------------------------

然而,需要注意的是,不是所有的查询都适合使用联合索引。
在决定是否使用联合索引时,应该考虑实际的查询模式和性能需求。
有时候,单独创建索引可能更合适,特别是在只涉及到单个列的查询时。
联合索引的创建也需要权衡磁盘空间和维护成本,因为随着联合索引列的增加,
索引的大小也会增加。所以建立联合索引应该是有针对性的,基于具体的查询需求和数据模式。



.
.
.
.
.
.
.

分别给3个字段建普通索引与给3个字段建联合索引的区别


分别给3个字段建普通索引与给3个字段建联合索引的区别

给3个字段分别添加一个普通索引,与给3个字段添加一个联合索引,当我在查询数据时的过滤条件,
是这3个字段的条件时,给这3个字段分别添加普通索引的情况下,
是先在第一个b+树索引表里面找出符合过滤条件的索引数据,
再回表到主键索引的b+树里面,拿到叶子节点里对应的行数据,交给server层,让server层根据where后面的条件,
筛选出符合的数据


如果是联合索引的情况下,且是5.6版本以后有索引下推后,
是在联合索引的b+树表里面,根据第一个索引条件查到联合索引B+树叶子节点的联合索引各字段数据与主键id后
再用第二个条件进行过滤,再进行第三个条件的过滤,最后再根据这些符合的叶子节点数据回表到主键索引里,拿对应的行数据

假设10000条总数据,第一个过滤后符合条件的只有1000个数据,
那么第二个过滤条件就是在1000个的基础上继续过滤,同理第三个过滤条件只需要在第二个过滤条件过滤后的基础上,
再继续过滤即可了





.
.
.

posted @   tengyifan  阅读(15)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示