mysql 联合索引 复合索引 (abc) 命中率:在工作中经常会使用到联合索引,在百度查询多很多资料也有说法不一的、给大家实测下100w数据下查询命中率,废话不多说、上干货;

创建测试表:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
CREATE TABLE `test`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `a` int(11) NOT NULL DEFAULT 1,
  `b` int(11) NOT NULL DEFAULT 1,
  `c` int(11) NOT NULL DEFAULT 1,
  `d` int(11) NOT NULL DEFAULT 1,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Compact;

SET FOREIGN_KEY_CHECKS = 1;

在插入数据前添加索引,在100w数据添加还可以接受 数量越大越慢 带来的也是io占用 具体原理百度搜索 mysql innoDB索引原理(聚簇索引) 、 b+树。(或后续更新

alter table test add index sindex(a,b,c);

批量插入100w条数据做测试,漫长的等待过程,超时 set_time_limit(0);

$n = 1000000;
for ($i = 0; $i <= $n; $i++) {//a 范围 0 - 1000 随机整数//b 范围 0 - 10000 随机整数//c 范围 0 - 100000 随机整数//d 范围 0 - 1000 随机整数$data['a'] = rand(0, 1000);$data['b'] = rand(0, 10000);$data['c'] = rand(0, 100000);$data['d'] = rand(0, 1000);DB::table('test')->insert($data);
}

测试索引命中、为了更清晰直观体现索引命中率、我把结果都截图到每条语句的下方导致篇幅过长;

1.explain select * from test where a = 437 and b = 7800 and c = 33561;

2.explain select * from test where a = 437 and c = 7800 and b = 33561;

3.explain select * from test where a = 437 and b = 33561;

4.explain select * from test where a = 437

5.explain select * from test where c = 7800 and b = 33561;

6.explain select * from test where b = 33561;

7.explain select * from test where b = 33561 and a = 437;

8.explain select * from test where b = 33561 and c = 7800 and a = 437;

结论:
1.and and 只要用到了最左侧a都会使用到索引

2.a and b or c 不会使用索引

3.最左侧a列被大于、小于、不等于比较的、不使用索引

4.b列 c列使用大于、小于、不等于比较的 会使用索引

5. order  by a desc group by a 只要保持最左侧a原则 都会使用索引;

mysql联合索引abc相关推荐

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

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

  2. MySQL联合索引(abc)命中规则

    1.建表 mysql创建一张表,表名:'test_models' id列为 主键,int类型 ,自增 a,b,c,d,e 全部是int(11) 为(a,b,c)添加一个联合索引 index_abc 执 ...

  3. mysql如何优化联合索引abc使用

    目录 一.数据背景 二.key-len列的计算规则 三.SQL执行测试 1)sql执行 a,b,c字段都存在 2)sql执行 a,b,c部分索引字段为查询条件 3)针对条件,优化索引 四.总结 mys ...

  4. mysql联合索引学习

    mysql 联合索引生效的条件.索引失效的条件 mysql索引最左匹配原则的理解 联合索引是什么 对多个字段同时建立的索引(有顺序,ABC,ACB是完全不同的两种联合索引.) 为什么要用 以联合索引( ...

  5. mysql联合索引的数据结构

    一.本文主要讲解的内容有: 联合索引在B+树上的存储结构 联合索引的查找方式 为什么会有最左前缀匹配原则 在分享这篇文章之前,我在网上查了关于MySQL联合索引在B+树上的存储结构这个问题,翻阅了很多 ...

  6. mysql 联合索引详解

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

  7. 找到符合条件的索引_高频面试题:MySQL联合索引的最左前缀匹配原则

    前言 之前在网上看到过很多关于mysql联合索引最左前缀匹配的文章,自以为就了解了其原理,最近面试时和面试官交流,发现遗漏了些东西,这里自己整理一下这方面的内容. 最左前缀匹配原则 在mysql建立联 ...

  8. mysql联合索引测试

    mysql联合索引和查询条件的匹配原则: 只有当联合索引的第一个字段在where条件中出现时,才会使用索引查询,不然就是全表扫描查询. 表的索引为: KEY `Index_query` (`trans ...

  9. mysql 联合索引 range_MySQL 联合索引使用情况

    验证联合索引使用的情况 索引是一个排序的结构,用于快速检索和加速排序 MySQL表结构 index_test | CREATE TABLE `index_test` ( `c1` char(10) N ...

最新文章

  1. Docker容器指定使用那几个CPU、memory资源限制
  2. MessageBoxA 和MessageBoxW
  3. 数据挖掘-数据预处理的必要性及主要任务
  4. java设计模式之模板模式
  5. js修改id的值_如何修改pytesthtml源码来优化接口自动化测试报告
  6. Qt-做一个快速打包插件(一键完成项目软件打包)
  7. sql统计表中各类型金额_各类型模具设计中“脱料结构”种类、使用范围揭秘,值得收藏...
  8. deepin20无法启动图形界面_深度操作系统 deepin 20(1003)正式版发布|操作系统|管理器|deepin|磁盘|软件包...
  9. 2018年​最酷的APP手机UI设计趋势
  10. 雅俗共享的微信小程序《老子探秘》,大家评价一下好坏
  11. 缺失数据填补基础方法(1)——k-Nearest Neighbors (kNN) 填补
  12. vc++6.0中文乱码的解决方法
  13. windows7安装打印机提示“本地打印后台处理程序服务没有运行”
  14. 区块链引领互联网大会,徐明星浅谈后互联网时代“水电煤”
  15. L1-044 稳赢(15分) java
  16. 如何恢复微信聊天记录
  17. hutool 读取扩展名文件_批量修改文件名,一键就可以
  18. CompareNoCase 比较两个字符串,不区分大小写
  19. 复制构造函数java_Java中的拷贝构造函数
  20. php flv 转成 mp4,电脑视频转格式,flv动画怎么转换成mp4格式,怎么转换比较方便...

热门文章

  1. 技能高考c语言程序填空题,技能练习题
  2. 华为手机上取消html默认,华为手机必须关闭的5个默认设置,使你的手机不再卡顿,再用2年...
  3. php正则匹配反斜杠问题
  4. 看透Spring MVC源代码分析与实践 !
  5. (模拟)吉林大学ACM集训队选拔赛(重现赛) I题 Firework
  6. javascript数组之数组排序:数组按照字符顺序排序,反转数组,数字排序,比值函数,随机排序,查找最大最小数组值,自制找数组最高最低值办法,排序对象数组
  7. 特殊符号无法识别问题
  8. 微信开发者工具——快捷键汇总
  9. 每日简报 5月25日简报新鲜事 每天一分钟 了解新鲜事
  10. 关于《地下城与勇士》的一些分析