Mysql 系列文章主页

===============

最佳左前缀法则学习和Demo演示

1 准备数据

1.1 建表

DROP TABLE IF EXISTS staff;
CREATE TABLE IF NOT EXISTS staff (id INT PRIMARY KEY auto_increment,name VARCHAR(50),age INT,pos VARCHAR(50) COMMENT '职位',salary DECIMAL(10,2)
);

1.2 插入数据

INSERT INTO staff(name, age, pos, salary) VALUES('Alice', 22, 'HR', 5000);
INSERT INTO staff(name, age, pos, salary) VALUES('Bob', 22, 'RD', 10000);
INSERT INTO staff(name, age, pos, salary) VALUES('David', 22, 'Sale', 120000);

2 测试&Explain分析

2.1 创建索引

CREATE INDEX idx_nameAgePos ON staff(name, age, pos);

创建了一个基于 name, age, pos 三个字段的索引

2.2 索引测试

Case#1:只根据 name 字段来查询

EXPLAIN SELECT * FROM staff WHERE name = 'Alice';

结果:

  • type=ref
  • key=索引
  • ref=const
  • ken_len=53

Case#2:只根据 name & age 字段来查询

EXPLAIN SELECT * FROM staff WHERE name = 'Alice' AND age = 22;

结果:和 Case#1 差不多,但是:

  • key_len=58
  • ref=const, const

Case#3:根据 name & age & pos 来查询

EXPLAIN SELECT * FROM staff WHERE name = 'Alice' AND age = 22 AND pos = 'HR';

结果:索引仍然生效,同时,key_len & ref 比 Case#2 中的结果更丰富

Case#4:根据 age & pos 来查询

EXPLAIN SELECT * FROM staff WHERE age = 22 AND pos = 'HR';

结果:没有索引,全表扫描

Case#5:根据 name & pos 来查询

EXPLAIN SELECT * FROM staff where name = 'Alice' AND pos = 'HR';

结果:和 Case#1 相同(说明 pos 字段没有用上索引)

3 总体分析

Case1,2,3都用了上索引,且使用索引长度依次增加(key_len=53,58,111 且 ref=1个const,2个const,3个const),符合最佳左前缀法则;

Case4中没有带头大哥(火车头),于是,全表扫描;

Case5中只有 name 字段使用上了索引,中间兄弟(中间车厢)age 断了,于是,后面的兄弟(车厢)pos 挂了;

4 总结

最佳左前缀法则:带头大哥不能死、中间兄弟不能断

转载于:https://www.cnblogs.com/cyhbyw/p/8820369.html

索引法则--最佳左前缀法则相关推荐

  1. 索引的使用—— 验证索引提升查询效率 || 避免索引失效 —— 全值匹配 /最左前缀法则/范围查询右边的列,不能使用索引/不要在索引列上进行运算操作/字符串不加单引号,造成索引失效

    索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题 验证索引提升查询效率 查询速度很快,接近0s ,主要的原因是因为id为主键,有索 ...

  2. MySQL高级最左前缀法则

    最左前缀法则 如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始,并且不跳过索引中的列. 匹配最左前缀法则,走索引: 违法最左前缀法则 , 索引失效: 如果符合最左法则,但是出现跳跃某 ...

  3. 数据库性能优化1——正确建立索引以及最左前缀原则

    1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...

  4. MySQL 索引 :哈希索引、B+树索引、最左前缀匹配规则、全文索引

    文章目录 索引 什么是索引 索引优缺点与适用场景 常见的索引 哈希索引 自适应哈希索引 B+树索引 聚集索引 非聚集索引 使用方法 联合索引 最左前缀匹配规则 覆盖索引 全文索引 使用方法 索引 什么 ...

  5. 数据库正确建立索引以及最左前缀原则

    数据库正确建立索引以及最左前缀原则 转自:https://blog.csdn.net/zhanglu0223/article/details/8713149 1. 索引建立的原则 用于索引的最好的备选 ...

  6. mysql数据库最多列_mysql多列索引和最左前缀

    数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度. 索引优化是数据库优化的最重要手段. 如果查询语句使 ...

  7. 正确建立索引以及最左前缀原则

    1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...

  8. mysql索引优化原则:覆盖索引、最左前缀原则、索引下推

    文章目录 前言 round1:覆盖索引 round2:最左前缀原则 round3:索引下推 小结 前言 在文章开始前,小编提出几个问题,读者可以思考一下如何回答.如果对于以下的问题,回答的模棱两可甚至 ...

  9. 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“

    04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码:通过目录能快速找到某个主 ...

最新文章

  1. Myeclipse安装、配置、测试
  2. MySql笔记之数据表
  3. .Net Core小技巧 - Swagger适配虚拟目录及二级目录
  4. Java设计模式之行为型:状态模式
  5. 在eclipse中修改java web项目的名称
  6. C# 的未来:主构造函数
  7. 光端机常见五大故障问题及解决方法
  8. 深入理解Scala的隐式转换系统
  9. BZOJ 1036: [ZJOI2008]树的统计Count
  10. 遍历集合的两种方式:迭代器和增强型for循环
  11. Eclipse用法和技巧五:生成说明文档2
  12. 初级程序员面试不靠谱指南(二)
  13. java文件下载和导出文件名乱码浏览器兼容性问题
  14. 安装sqlserver 2017安装 需要安装oracle JRE7 更新 51(64位)或更高版本(已解决)
  15. vhdl8三种方式实现38译码器
  16. 数据库 - 数据字典及其使用
  17. PostMan中文插件支持8.12.2
  18. 服务器双向同步文件,lsyncd配置两台服务器文件双向实时同步
  19. useragent怎么获取
  20. CSMA/CA与CSMA/CD的区别

热门文章

  1. python开发基础作业02:三级菜单,使用字典dic及列表
  2. jq 如何获取多选框选中的值
  3. (HDU)1098 -- Ignatius's puzzle(Ignatius的困惑)
  4. 美国大学计算机学科分类
  5. hive拉链表方案二
  6. 【体系结构】Oracle的各种文件及其重要性
  7. java实例属性_Java 静态属性与实例属性的初始化
  8. 探究streambuf
  9. Hadoop 系列 HDFS:分布式文件系统(HDFS文件读写)
  10. Java面试题详解一:面向对象三大特性