索引法则--最佳左前缀法则
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
索引法则--最佳左前缀法则相关推荐
- 索引的使用—— 验证索引提升查询效率 || 避免索引失效 —— 全值匹配 /最左前缀法则/范围查询右边的列,不能使用索引/不要在索引列上进行运算操作/字符串不加单引号,造成索引失效
索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题 验证索引提升查询效率 查询速度很快,接近0s ,主要的原因是因为id为主键,有索 ...
- MySQL高级最左前缀法则
最左前缀法则 如果索引了多列,要遵守最左前缀法则.指的是查询从索引的最左前列开始,并且不跳过索引中的列. 匹配最左前缀法则,走索引: 违法最左前缀法则 , 索引失效: 如果符合最左法则,但是出现跳跃某 ...
- 数据库性能优化1——正确建立索引以及最左前缀原则
1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...
- MySQL 索引 :哈希索引、B+树索引、最左前缀匹配规则、全文索引
文章目录 索引 什么是索引 索引优缺点与适用场景 常见的索引 哈希索引 自适应哈希索引 B+树索引 聚集索引 非聚集索引 使用方法 联合索引 最左前缀匹配规则 覆盖索引 全文索引 使用方法 索引 什么 ...
- 数据库正确建立索引以及最左前缀原则
数据库正确建立索引以及最左前缀原则 转自:https://blog.csdn.net/zhanglu0223/article/details/8713149 1. 索引建立的原则 用于索引的最好的备选 ...
- mysql数据库最多列_mysql多列索引和最左前缀
数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度. 索引优化是数据库优化的最重要手段. 如果查询语句使 ...
- 正确建立索引以及最左前缀原则
1. 索引建立的原则 用于索引的最好的备选数据列是那些出现在WHERE子句.join子句.ORDER BY或GROUP BY子句中的列. 仅仅出现在SELECT关键字后面的输出数据列列表中的数据列不是 ...
- mysql索引优化原则:覆盖索引、最左前缀原则、索引下推
文章目录 前言 round1:覆盖索引 round2:最左前缀原则 round3:索引下推 小结 前言 在文章开始前,小编提出几个问题,读者可以思考一下如何回答.如果对于以下的问题,回答的模棱两可甚至 ...
- 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“
04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码:通过目录能快速找到某个主 ...
最新文章
- Myeclipse安装、配置、测试
- MySql笔记之数据表
- .Net Core小技巧 - Swagger适配虚拟目录及二级目录
- Java设计模式之行为型:状态模式
- 在eclipse中修改java web项目的名称
- C# 的未来:主构造函数
- 光端机常见五大故障问题及解决方法
- 深入理解Scala的隐式转换系统
- BZOJ 1036: [ZJOI2008]树的统计Count
- 遍历集合的两种方式:迭代器和增强型for循环
- Eclipse用法和技巧五:生成说明文档2
- 初级程序员面试不靠谱指南(二)
- java文件下载和导出文件名乱码浏览器兼容性问题
- 安装sqlserver 2017安装 需要安装oracle JRE7 更新 51(64位)或更高版本(已解决)
- vhdl8三种方式实现38译码器
- 数据库 - 数据字典及其使用
- PostMan中文插件支持8.12.2
- 服务器双向同步文件,lsyncd配置两台服务器文件双向实时同步
- useragent怎么获取
- CSMA/CA与CSMA/CD的区别