mysql什么时候使用联合索引_mysql 什么时候用单列索引?什么使用用联合索引?...

本文探讨了数据库索引的优化策略,包括确定优化目标、选择合适的字段建立索引及评估索引带来的收益与成本。通过具体案例分析了单列索引与联合索引的应用场景。

点击蓝色字8f6ab4735279846ffbd82f8a03bf0e32.png免费订阅,每天收到这样的好信息

前言:最近有不少粉丝关注本公众号。并且我已经成功开通了流量主同时会赚一点点广告费,我打算每个月把这部分钱拿出来给大家买点书刊,算是给大家一点福利吧。大家想买什么书扫描下方的加他拉你加群。最后,非常感谢大家的关注。

8f45a9d033489c77ce7956b32db2a59c.png

1c4147e64130ca4327a32d55611b0a0d.gif

1,首先要确定优化的目标,在什么样的业务场景下,表的大小等等。如果表比较小的话,可能都不需要加索引。

2,哪些字段可以建索引,一般都where、order by 或者 group by 后面的字段。

3,记录修改的时候需要维护索引,所以会有开销,要衡量建了索引之后的得与失。

学生表,可以认为name的重复度比较小,而age的重复度比较大,对于单列索引来说,比较适合建在重读度低的列上。

对于select * from students where name='张三’and  age=18; 题主所说的两种情况

A. name 和 age 各自单独建立索引。

一般来说mysql会选择其中一个索引,name的可能性比较大,因为mysq会统计每个索引上的重复度,选用低重复度的字段。另外一个age的索引就不会用到,但还有维护索引的开销,所以age的索引不需要创建。

B. name和age的联合索引

这种索引的切合度最好,mysql会直接选用这个索引。但相对单独的name索引来说,维护的成本要大一些,并且索引数据占用的存储空间也要更大一些。

回过来看,有必要使用联合索引吗? 我的看法是没有必要,因为学校里可能会有重名的人,但比较少。用name就可以比较精准的找到记录,即使有重复的也比较少。

什么情况下使用联合索引比较好呢? 举一个例子,大学选认课老师,需要创建一个关系对应表,有2个字段,student_id 和 teacher_id,想要查询某个老师和某个学生是否存在师生关系。

一个学生会选几十个老师,一个老师会带几百个学生

如果只为student_id建立索引的情况下,经过索引会选出几十条记录,然后在内存中where一下,去除其余的老师。

相反如果只为teacher_id建立索引,经过索引会选出几百条记录,然后在内存中where一下,去除其余的学生。

两种情况都不是最优的,这个时候使用联合索引最合适,通过索引直接找到对应记录。

ad6bc59d455d63626788074cd56c689e.png

打油诗

我不在乎我的作品文章是被现在的人读还是由子孙后代来读。既然上帝花了六千年来等一位观察者,我可以花上一个世纪来等待读者。

726955ae35322c31780f32b09773ff6f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值