mysql联合查询语句(数据库mysql安装教程) -九游会ag

引言

这篇文章作为《面试官:谈谈你对mysql索引的认识》的续篇,我当时在写这篇的时候,考虑到篇幅问题所以略去了联合索引的内容,今天给大家补上。本文预计分为两个部分:

(1)联合索引部分的基础知识

在这个部分,我们温习一下联合索引的基础

(2)联合索引部分的实战题

在这个部分,列举几个我认为算是实战中的代表题,挑出来说说。

正文

基础

讲联合索引,一定要扯最左匹配!放心,我不扯有的没的,几句话懂个大概就行!最左匹配所谓最左原则指的就是如果你的 sql 语句中用到了联合索引中的最左边的索引,那么这条 sql 语句就可以利用这个联合索引去进行匹配,值得注意的是,当遇到范围查询(>、<、between、like)就会停止匹配。假设,我们对(a,b)字段建立一个索引,也就是说,你where后条件为

a = 1a = 1 and b = 2

是可以匹配索引的。但是要注意的是~你执行

b= 2 and a =1

也是能匹配到索引的,因为mysql有优化器会自动调整a,b的顺序与索引顺序一致。相反的,你执行

b = 2

就匹配不到索引了。而你对(a,b,c,d)建立索引,where后条件为

a = 1 and b = 2 and c > 3 and d = 4 

那么,a,b,c三个字段能用到索引,而d就匹配不到。因为遇到了范围查询!

最左匹配的原理?假设,我们对(a,b)字段建立索引,那么入下图所示

mysql联合查询语句(数据库mysql安装教程)

如图所示他们是按照a来进行排序,在a相等的情况下,才按b来排序。

因此,我们可以看到a是有序的1,1,2,2,3,3。而b是一种全局无序,局部相对有序状态!什么意思呢?从全局来看,b的值为1,2,1,4,1,2,是无序的,因此直接执行b = 2这种查询条件没有办法利用索引。

从局部来看,当a的值确定的时候,b是有序的。例如a = 1时,b值为1,2是有序的状态。当a = 2时候,b的值为1,4也是有序状态。因此,你执行a = 1 and b = 2时a,b字段能用到索引的。而你执行a > 1 and b = 2时,a字段能用到索引,b字段用不到索引。因为a的值此时是一个范围,不是固定的,在这个范围内b值不是有序的,因此b字段用不上索引。

综上所示,最左匹配原则,在遇到范围查询的时候,就会停止匹配。

实战

ok,懂上面的基础,我们就可以开始扯了~我举了经典的五大题型,看完基本就懂!

题型一

如果sql为

select * from table where a = 1 and b = 2 and c = 3; 

如何建立索引?如果此题回答为对(a,b,c)建立索引,那都可以回去等通知了。此题正确答法是:(a,b,c)或者(c,b,a)或者(b,a,c)都可以,重点要的是将区分度高的字段放在前面,区分度低的字段放后面。像性别、状态这种字段区分度就很低,我们一般放后面。

例如假设区分度由大到小为b,a,c。那么我们就对(b,a,c)建立索引。在执行sql的时候,优化器会帮我们调整where后a,b,c的顺序,让我们用上索引。

题型二

如果sql为

select * from table where a > 1 and b = 2; 

如何建立索引?如果此题回答为对(a,b)建立索引,那都可以回去等通知了。此题正确答法是,对(b,a)建立索引。如果你建立的是(a,b)索引,那么只有a字段能用得上索引,毕竟最左匹配原则遇到范围查询就停止匹配。如果对(b,a)建立索引那么两个字段都能用上,优化器会帮我们调整where后a,b的顺序,让我们用上索引。

题型三

如果sql为

select * from `table` where a > 1 and b = 2 and c > 3; 

如何建立索引?此题回答也是不一定,(b,a)或者(b,c)都可以,要结合具体情况具体分析。

拓展一下

select * from `table` where a = 1 and b = 2 and c > 3; 

怎么建索引?嗯,大家一定都懂了!

题型四

select * from `table` where a = 1 order by b;

如何建立索引?这还需要想?一看就是对(a,b)建索引,当a = 1的时候,b相对有序,可以避免再次排序!那么

select * from `table` where a > 1 order by b; 

如何建立索引?对(a)建立索引,因为a的值是一个范围,这个范围内b值是无序的,没有必要对(a,b)建立索引。

拓展一下

select * from `table` where a = 1 and b = 2 and c > 3 order by c;

怎么建索引?

题型五

select * from `table` where a in (1,2,3) and b > 1; 

如何建立索引?还是对(a,b)建立索引,因为in在这里可以视为等值引用,不会中止索引匹配,所以还是(a,b)!

拓展一下

select * from `table` where a = 1 and b in (1,2,3) and c > 3 order by c;

如何建立索引?此时c排序是用不到索引的。

所以

希望大家在面试的时候遇到联合索引的题目,能够答出来吧

派优网部分新闻资讯、展示的图片素材等内容均为用户自发上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习交流。用户通过本站上传、发布任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的九游会ag的版权,请联系九游会ag一经核实,立即删除。并对发布账号进行封禁。
(0)
值得看的头像值得看

相关推荐

  • 作为互联网运营从业人员,要想真正的做好运营工作,掌握一些专业的运营工具和知识是必须的。根据运营工作中的主要内容,分享一些常用的网站和工具,基本可以覆盖运营工作的方方面面,希望可以对…

    2022年11月11日
  • 随着房价的不断攀升,越来越多的人选择通过贷款购房。然而,贷款还款也成为了购房者必须面对的问题。本文以万州农业银行还房贷流程为例,详细介绍了还款方式和期限,希望能对购房者有所帮助。 …

    2023年7月19日
  • 微信是我们现在主要的交流沟通工具,可以一天不打电话,但不能一天不上微信。 如果哪天我们很烦一个人,讨厌一个人,经常做的事情,就是删掉对方的微信。 删掉微信,从此不联系了。 但很多时…

    2023年2月12日 资讯投稿
  • 随着社会的发展和人民健康意识的提高,医疗行业越来越受到重视。越来越多的人选择进入医学行业,成为一名医生。而对于想要成为一名医生的考生来说,选择一所合适的医学院校是非常重要的。本文将…

    2023年9月19日
  • 成人励志小故事及感悟(20个有深度的小故事大道理)

    很多时候,事情并没有想象中那么复杂,只是我们没想到而已。精选经典励志的小故事大道理,让我们从小故事中,明白很多的大道理! 1.卑微的伟人 一位父亲带着儿子去参观梵高故居,在看过那张…

    2022年9月14日
  • 同等学历是什么意思(大专毕业可以参加高考吗?)

    平时我们会听到这些词“中职、中专、技校、技师、职高、普高、高职、大专”。 没有专业的研究,真的是傻傻分不清,今天银角带大家认识升学择校必懂的概念,希望这份图解对大家有帮助。 首先做…

    2022年6月3日 资讯投稿
  • 想设计海报,但是又嫌ps制作太繁琐,推荐10个简单实用的在线平面设计网站,用过就离不开的那种!就算是小白,也能设计出精美时尚的海报。 01 创客贴 https://www.chua…

    2022年1月4日 资讯投稿
  • 射手水瓶座的女孩,是一个充满活力和自信的人。她们善于表达自己的想法和情感,同时也很独立和冷漠。这种性格特点,让她们在社交场合中很受欢迎,但也会让人感到难以接近。 开朗自信的一面 射…

    2023年7月26日
  • 随着社会的发展,越来越多的人选择进入高等教育,而专科学校也成为了越来越多人的选择。但是,如何选择适合自己的专科学校呢?下面就从多方面来探讨一下。 一、专业设置 专业是选择专科学校的…

    2023年9月1日
  • 亚马逊的acos(广告销售成本)公式对亚马逊的卖家来说是很重要的,因为根据亚马逊的说法,它可以帮助你衡量广告效果与支出。 较低的acos意味着你在广告上的支出占销售的比例较低。拥有…

    2022年9月4日
返回顶部
网站地图