作者:范孝鹏
链接:https://www.zhihu.com/question/40736083/answer/88191544
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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一下,去除其余的学生。

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

有帮到你的点赞、收藏一下吧

需要更多教程,微信扫码即可

mysql 什么时候用单列索引?什么使用用联合索引?相关推荐

  1. mysql联合索引怎么存储_联合索引在B+树上的存储结构及数据查找方式

    能坚持别人不能坚持的,才能拥有别人未曾拥有的. 关注编程大道公众号,让我们一同坚持心中所想,一起成长!! 引言 上一篇文章<MySQL索引那些事>主要讲了MySQL索引的底层原理,且对比了 ...

  2. mysql教程联合索引_MySQL中的联合索引学习教程

    联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...

  3. mysql索引(五)联合索引

    Mysql索引大概有五种类型: 普通索引(INDEX):最基本的索引,没有任何限制 唯一索引(UNIQUE):与"普通索引"类似,不同的就是:索引列的值必须唯一,但允许有空值. 主 ...

  4. 《MySQL学习》 索引 下 覆盖索引,MRR,联合索引

    一. 覆盖索引 有一张表T1,它的建表语句如下 mysql> create table T1 ( ID int primary key, k int NOT NULL DEFAULT 0, s ...

  5. mysql中联合索引abc 使用bac_mysql 联合索引

    mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). ...

  6. mysql联合索引like_MySQL全文索引、联合索引、like查询、json查询速度大比拼

    查询背景 有一个表tmp_test_course大概有10万条记录,然后有个json字段叫outline,存了一对多关系(保存了多个编码,例如jy1577683381775) 我们需要在这10万条数据 ...

  7. mysql联合索引不按顺序_mysql联合索引的使用以及sql执行的过程顺序

    例如新增了一个联合索引 abc, 我写一条sql select * from table1 where a=1 and b=2 and c=2; 这样3个字段都是可以使用联合索引的.3者调换任意位置, ...

  8. mysql联合索引和单索引_mysql联合索引跟单列索引的区别

    为了提高数据库效率,建索引是家常便饭:那么当查询条件为2个及以上时,我们是创建多个单列索引还是创建一个联合索引好呢?他们之间的区别是什么?哪个效率高呢?我在这里详细测试分析下. 一.联合索引测试 注: ...

  9. mysql联合索引单列索引效率_联合索引和单个索引使用注意事项

    联合索引: 通俗理解: 利用索引中的附加列,您可以缩小搜索的范围,但使用一个具有两列的索引 不同于使用两个单独的索引.复合索引的结构与电话簿类似,人名由姓和名构成,电话簿首先按姓氏对进行排序,然后按名 ...

最新文章

  1. python 做山水画_服了!年度最强的编程语言来了!它不是Python!
  2. leetcode 412. Fizz Buzz
  3. Android Studio 插件开发详解二:工具类
  4. C语言学习之时钟函数clock()函数
  5. 线段树练习——区间合并
  6. 剖析SQL Server执行计划
  7. 如何计算两个日期之间相差的天数?
  8. C#读写txt文件的两种方法介绍
  9. php教程 二叉树,PHP ClassObject -- PHP 自排序二叉树的深入解析
  10. 沃尔玛宣布与TikTok达成直播带货合作?
  11. IceE-1.3.0的移植过程及错误Time.h:36: error: expected type-specifier before ‘time-转
  12. 讲讲金融业务(一)--自助结算终端POS
  13. python 主线程_Python 主线程捕获子线程异常
  14. android 微信小程序 唤起app,Android 微信小程序打不开app方案解决
  15. python-回调函数
  16. Python提取PDF简历中的信息,写入Excel
  17. css 缩小图片后,图片变模糊的解决办法
  18. linux drupal 7,在CentOS 7下试验Drupal 7
  19. 2021年网络空间安全学院预推免面试经验总结
  20. 刘彬20000词汇01

热门文章

  1. 为什么现在的手机价格越来越高,最后一条真相了...
  2. 10月10日见!官方再曝OPPO K5外观配置细节:6400万超清四摄加持
  3. 惠普与4PS联络中心国际标准组织达成战略合作
  4. 黑鲨游戏手机2 Pro跑分曝光:搭载骁龙855 Plus实锤
  5. 亚马逊创始人贝佐斯离婚协议本周生效 前妻分得380亿美金
  6. 你们都在吐槽的华为“浴霸”被这三家拿去用了...
  7. 这可能是国内首款5G手机了!中兴AXON 10 Pro 5G上市定档
  8. 使用Libxml2解析xml[转]
  9. 用在WEB开发中实现会话跟踪实现
  10. 浅谈网络通信中的流量整形