1.什么是复合索引?

顾名思义,复合索引的意识就是,将数据库中的多个字段组合起来形成的一个索引就是复合索引。创建复合索引的方式如下图所示:
(1)使用Navicat创建
(2)使用SQL语句创建

UNIQUE key 'idex_test'('bid','bnumber','bname') USING BTREE.

2.什么是最左原则

最左原则说是,在SQL语句中,复合索引的第一个字段必须出现查询语句中,这样索引才能够被使用。
(1)比如下面的查询语句,就会使用到复合索引:

select * from book where book.bid='1'

我们使用explain关键字来查看一下:

explain select * from book where book.bid='1'


我们可以看到这条SQL使用到了索引。
(2) 但是如果我们使用复合索引的除第一个字段以外的其它字段进行查询的时候,则不会走索引,如下面的SQL:

select * from book where book.bnumber='10001'

我们可以看到这条SQL并没有走索引。因为‘bnumber’这个字段并不是索引的第一个字段,所以索引失效!

2.1 为什么会出现这样的情况?

好,如果你也有这样的疑问,说明你是个爱动脑筋、爱思考的小朋友。我们接着往下走。

索引,其实就是相当于一本厚厚字典的目录,如果你想要找到一个字,在没有目录的情况下你需要手动的从第一页开始找直到找到那个字为止(当然这里只是举这个例子,有些人查字典真的不用目录的~)如果有了目录的话我们可以从目录中轻松的把我们想要找的字找出来

这和复合索引有什么关系呢?比如来说你需要查“胡”这个字,他的部首是“月”,我们去部首检字表中找到“月”,然后我们数“古”有5画,最后,我们就成功的在“月”所在的部首检字表中,找到了“胡”字所在的页。

复合索引的道理和上面的例子是一样的,“胡”字的部首“月”相当于复合索引中的第一个字段“bid”,然后“古”字有几画就相当于复合索引中的第二个字段“bnumber”,在查找的过程中我们是通过部首定位到部首检字表,再通过“古”字有5画从部首检字表定位到具体的字。如果我们连“胡”字的部首都不知道,那么我们如何找到部首检字表所在的位置呢?,所以这就是为什么复合索引的除第一个字段以外的其它字段进行查询的时候,不会走索引的原因。这就是最左原则。

3.使用复合索引的目的?

  • 能够形成索引覆盖,提高where查询的效率

4. 复合索引的列越多越好吗?

  • 索引并不是越多越好,恰恰相反,因为在新增数据时,会更新索引影响写入的效率。

通俗的解释什么是复合索引和最左原则相关推荐

  1. Mysql联合索引失效,需注意索引的最左原则

    联合索引一直在用,没想到今天栽了跟头,联合索引竟然还有最左原则(左前缀原则)这么一个说法,那什么是最左原则呢? DROP TABLE IF EXISTS `gu_suo`; CREATE TABLE ...

  2. mysql 复合索引 总结

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

  3. mysql复合索引与普通索引总结

     正则匹配url Kohana框架as_array转换json数据 mysql复合索引.普通索引总结 2013-11-18 14:03:13|  分类: mysql |  标签: |举报 |字号大 ...

  4. mysql 复合索引,普通索引,索引分类总结

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

  5. mysql复合索引、普通索引总结

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

  6. 【推荐】mysql联合 索引(复合索引)的探讨

    Mysql联合 索引(复合索引)的使用原则 命名规则:表名_字段名 需要加索引的字段,要在where条件中. 数据量少的字段不需要加索引.最窄的字段放在键的左边. 如果where条件中是OR关系,必须 ...

  7. mysql复合索引(联合索引)的使用场景

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

  8. mysql数据库复合索引

    mysql数据库中一张user表中,其中包含字段A,B,C,字段类型如下:A:int,B:int,C:int根据字段A,B,C按照ABC顺序建立复合索引idx_A_B_C,以下查询语句中使用到索引id ...

  9. MySQL复合索引探究

    复合索引(又称为联合索引),是在多个列上创建的索引.创建复合索引最重要的是列顺序的选择,这关系到索引能否使用上,或者影响多少个谓词条件能使用上索引.复合索引的使用遵循最左匹配原则,只有索引左边的列匹配 ...

最新文章

  1. MSSQL-最佳实践-行级别安全解决方案
  2. python壁纸4k_【python日常学习】爬取4K桌面壁纸
  3. [转载]Java-集合框架完全解析
  4. oracle ctl file constantnull,Oracle 的一些导入和导出方法
  5. python执行到input后执行下一程序_Python基础知识储备,如何开关一个while循环
  6. django笔记精炼 200304
  7. 菜鸟喜欢的C# 入门认识和添加,修改,删除 文件夹 文件 大全(转)
  8. ai面试的优缺点_面试也能开“外挂”?领英AI做了什么
  9. mysql产生大量数据_mysql语句批量产生大量测试数据
  10. 标准表达式中数据类型不匹配_三观不同的人在一起有多累?三观一致的标准,不进行三观测试真不知道!人生观测试,价值观测试,世界观测试题推荐!超准三观匹配度测试!...
  11. lcm模块 oracle,lcm模组有哪些配件组成
  12. Jackme空气净化器 去除雾霾呵护家人健康神器
  13. logistic回归分析优点_logistic回归模型分析
  14. firewalld开放samba端口
  15. Deep Learning for UAV-based Object Detection andTracking: A Survey(论文翻译)
  16. 【LeetCode 1240】 Tiling a Rectangle with the Fewest Squares
  17. 计算机控制矢量网络分析仪,完全独立的HF(短波)软件定义收发器和矢量网络分析仪设计...
  18. ASO服务包括哪些内容?
  19. 如何 增删改查 XML文件中的元素
  20. idm下载器去哪里下载 idm下载器用不了什么原因

热门文章

  1. 鸿蒙系统隐私空间有提示吗,如何评价有人把华为手机的隐私空间功能,被冠上渣男救星手机...
  2. 智慧工地施工数字化平台让工程项目管理更轻松
  3. 搬砖五年,却干不过刚入职的,现在00后竞争力这么强了?
  4. java时间戳声明_java时间戳
  5. php坏处,电脑vt开启有什么坏处
  6. 如何翻译word文件中的英文
  7. python常用机器学习框架(torch、paddlepaddle、MindSpore)的安装方法
  8. Android NFC标签 开发深度解析 触碰的艺术
  9. VSCode连接远程服务器docker容器并调试代码
  10. 极限题型二:求数列极限常见题型