索引法则--尽量使用覆盖索引
Mysql 系列文章主页
===============
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);
2 测试&Explain分析
2.1 创建索引
CREATE INDEX idx_nameAgePos ON staff(name, age, pos);
2.2 测试
Case#1:
EXPLAIN SELECT * FROM staff where name = 'Alice' AND age = 22 AND pos = 'HR';
注意:SELECT中使用了 'SELECT *' ,且Extra中是 'Using index condition'
Case#2:
EXPLAIN SELECT name, age, pos FROM staff where name = 'Alice' AND age = 22 AND pos = 'HR';
注意:SELECT中是 'SELECT name, age, pos',且Extra中是 'Using where; Using indx'
那 'Using where; Using indx' 和 'Using index condition' 哪个更好呢?自己也还没有完全理解,给不了完整的回答,能提供的线索有下面一些。
从 StackOverFlow 上找到的一个回答,可以参考,地址:https://stackoverflow.com/questions/28759576/mysql-using-index-condition-vs-using-where-using-index
同时,截图如下:
简单翻译如下:
- 'Using index condition':Where条件包含索引和非索引的列,查询优化器将首先解析索引列同时从表中查询其它条件的行
- 'Using where; Using indx':'Using index' 意味着不需要扫描整个表。'Using where' 在非索引的列上可能仍然会做全表扫描,但是它会首先使用索引,如果在Where条件中有任何索引列的话,就像使用索引条件那样
- 哪个一个更好?'Using where; Using indx' 会比 'Using index condition' 更好,如果全部是覆盖索引的话。
感觉自己也还是蒙蒙的,,翻译也是,太生硬了,,,,,,,,,,,待以后理解透彻后再来补充和完善吧。。。。。TODO
不过从上面的例子中可以看到,'SELECT name, age, pos' 对应的是 'Using where; Using indx',这是全索引覆盖;而 'SELECT *' 对应的是 'Using index condition',这会查询 name, age, pos, salary 四个字段,而 salary 是不在索引上的。所以,可以肯定的是,'Using where; Using indx' 会比 'Using index condition' 更好。
3 结论
尽量使用覆盖索引——只访问索引的查询(索引列和查询列一致),减少 SELECT *
转载于:https://www.cnblogs.com/cyhbyw/p/8831060.html
索引法则--尽量使用覆盖索引相关推荐
- 尽量使用覆盖索引,避免select * || 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到|| 如果MySQL评估使用索引比全表更慢,则不使用索引
尽量使用覆盖索引,避免select * 尽量使用覆盖索引(只访问索引的查询(索引列完全包含查询列)),减少select * 7). 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索 ...
- 覆盖索引与联合索引_什么是覆盖索引?
前言 要搞明白覆盖索引首先就得明白主键索引和辅助索引的区别,以及查询时引擎的工作方式. 当然,以上都是基于innoDB引擎来说. 主键索引与辅助索引的区别 相信大家也了解过这方面的知识,这里就不展开了 ...
- 聚集索引、辅助索引、覆盖索引、联合索引
转载自 聚集索引.辅助索引.覆盖索引.联合索引 聚集索引(Clustered Index) 聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的即为整张表的行记录数据. 举个例子,直观 ...
- mysql索引优化原则:覆盖索引、最左前缀原则、索引下推
文章目录 前言 round1:覆盖索引 round2:最左前缀原则 round3:索引下推 小结 前言 在文章开始前,小编提出几个问题,读者可以思考一下如何回答.如果对于以下的问题,回答的模棱两可甚至 ...
- mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联
延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据. 为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针? 如果存的是物理地址指针不就不 ...
- mysql 覆盖索引 简书_mysql覆盖索引与回表
select id,name where name='shenjian' select id,name,sex* where name='shenjian'* 多查询了一个属性,为何检索过程完全不同? ...
- mysql什么是覆盖索引,MySQL中的覆盖索引
索引覆盖 Extra字段显示Using index,索引处取得的数据即是要求的数据,则不会再回数据文件再查询,直接返回了. explain select id from account where i ...
- 索引法则--LIKE以%开头会导致索引失效进而转向全表扫描(使用覆盖索引解决)...
Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...
- MySQL高级 - 索引的使用 - 覆盖索引
尽量使用覆盖索引,避免select * 尽量使用覆盖索引(只访问索引的查询(索引列完全包含查询列)),减少select * . 如果查询列,超出索引列,也会降低性能. TIP : using inde ...
- 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR
MySql系列整体栏目 内容 链接地址 [一]深入理解mysql索引本质 https://blog.csdn.net/zhenghuishengq/article/details/121027025 ...
最新文章
- Altium Designer 使用小结
- Java中的 Switch 是如何支持 String 的?为什么不支持 long?
- 透过Win2008 R2窥视微软虚拟化帝国
- java 输出全部小写_输入小写,输出大写,为什么报错?
- 京东五星电器送扫地机器人_家电也流行“套餐”,京东五星电器吹响国庆家装“集结号”...
- 论文浅尝 | 解决知识图谱补全中的长尾关系和不常见实体问题
- XSS-Game level 6
- Altium AD20中铺铜被导线分割的解决方法,如何正确覆铜整片区域
- 关于数据库查询时报“query block has incorrect number of result columns”
- jquery富文本编译器_jQuery 移动端artEditor富文本编辑器
- $.ajax()常用属性
- gps模拟器 matlab,基于Matlab/Simulink的数字中频GPS信号软件模拟器
- java后端英文_计算机程序员 前后台 英文怎么说
- mdt 计算机名_配置 MDT 部署共享规则
- c语言入门-程序运行的过程
- 调试笔记:BSOD 0xA
- 91 卫图与bigemap地图下载器功能对比
- matlab | 图像处理工具箱
- 传教士与野人过河问题
- 树型结构的四种建模方法
热门文章
- 优先队列 STL (转)
- MySQL连接超时自动断开连接问题
- console_init初始化的研究
- 【代码保留】IP地址排序(字符串分隔补齐)
- 北师大版图形的旋转二教案_北师大版三年级数学下册微课精讲+课件教案试卷(文末下载)...
- Linux音频驱动-PCM设备
- java中super和this_Java中this和super的用法总结
- C++设计模式10--命令模式(二)(Command)--降低请求发送者与接收者耦合
- ffmpeg主要数据结构及其之间的关系
- A - 棋盘问题 POJ - 1321(深搜)