mysq l单列索引 or 联合索引
来源:互联网 发布:新浪云部署node 编辑:程序博客网 时间:2024/05/18 18:18
在使用数据库的时候会经常使用到索引,单列索引是最常见、使用最多的,但是我们也经常遇到需要使用联合索引的场景,下边简单说明如何抉择使用何种索引。
1,首先要确定优化的目标,在什么样的业务场景下,表的大小等等。如果表比较小的话,可能都不需要加索引;
2,哪些字段需要建索引,一般都where、order by 或者 group by 后面的字段;
3,权衡索引的利弊,记录修改的时候需要维护索引,所以会有开销,要衡量建了索引之后的得与失。
以学生表为例,包含三个字段:id, name, age
可以认为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一下,去除其余的学生。
两种情况都不是最优的,这个时候使用联合索引最合适,通过索引直接找到对应记录。
- mysq l单列索引 or 联合索引
- mysq 单列索引 与 组合索引区别
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- MySQL单列索引和联合索引
- mysq l索引使用的几个注意事项
- 单列索引
- oracle 联合索引的疑问-与单列查询的关系
- MySQL索引之单列索引
- MYSQL 什么时候用单列索引?什么使用用联合索引?(收集)
- 联合索引
- 联合索引
- 联合索引
- php+js+yii2 实现钉钉企业应用免登
- Quartz.NET实现作业调度
- 【云栖大会】阿里云发布新物种神龙云服务器媲美物理机性能的弹性云服务器
- 持续集成(CI)
- 利用 python pprint模块 优雅的输出
- mysq l单列索引 or 联合索引
- UGUI_用动画实现横版或竖版游戏背景幕布的移动
- Android自定义电量控件中过度绘制与思考
- [monitor] 5. Linux core dump(进程临终快照)
- Ubuntu下远程登录到目标windows
- ALV 动态显示列Demo
- 初赛复习2
- mysql 字符串数字间转换
- SharePoint 2016 网站集备份还原