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

索引法则--尽量使用覆盖索引相关推荐

  1. 尽量使用覆盖索引,避免select * || 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到|| 如果MySQL评估使用索引比全表更慢,则不使用索引

    尽量使用覆盖索引,避免select * 尽量使用覆盖索引(只访问索引的查询(索引列完全包含查询列)),减少select * 7). 用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索 ...

  2. 覆盖索引与联合索引_什么是覆盖索引?

    前言 要搞明白覆盖索引首先就得明白主键索引和辅助索引的区别,以及查询时引擎的工作方式. 当然,以上都是基于innoDB引擎来说. 主键索引与辅助索引的区别 相信大家也了解过这方面的知识,这里就不展开了 ...

  3. 聚集索引、辅助索引、覆盖索引、联合索引

    转载自   聚集索引.辅助索引.覆盖索引.联合索引 聚集索引(Clustered Index) 聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的即为整张表的行记录数据. 举个例子,直观 ...

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

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

  5. mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联

    延迟关联:通过使用覆盖索引查询返回需要的主键,再根据主键关联原表获得需要的数据. 为什innodb的索引叶子节点存的是主键,而不是像myisam一样存数据的物理地址指针? 如果存的是物理地址指针不就不 ...

  6. mysql 覆盖索引 简书_mysql覆盖索引与回表

    select id,name where name='shenjian' select id,name,sex* where name='shenjian'* 多查询了一个属性,为何检索过程完全不同? ...

  7. mysql什么是覆盖索引,MySQL中的覆盖索引

    索引覆盖 Extra字段显示Using index,索引处取得的数据即是要求的数据,则不会再回数据文件再查询,直接返回了. explain select id from account where i ...

  8. 索引法则--LIKE以%开头会导致索引失效进而转向全表扫描(使用覆盖索引解决)...

    Mysql 系列文章主页 =============== 1 准备数据 1.1 建表 DROP TABLE IF EXISTS staff; CREATE TABLE IF NOT EXISTS st ...

  9. MySQL高级 - 索引的使用 - 覆盖索引

    尽量使用覆盖索引,避免select * 尽量使用覆盖索引(只访问索引的查询(索引列完全包含查询列)),减少select * . 如果查询列,超出索引列,也会降低性能. TIP : using inde ...

  10. 【MySQL进阶-03】深入理解mysql的索引分类,覆盖索引,覆盖索引失效,回表,MRR

    MySql系列整体栏目 内容 链接地址 [一]深入理解mysql索引本质 https://blog.csdn.net/zhenghuishengq/article/details/121027025 ...

最新文章

  1. Altium Designer 使用小结
  2. Java中的 Switch 是如何支持 String 的?为什么不支持 long?
  3. 透过Win2008 R2窥视微软虚拟化帝国
  4. java 输出全部小写_输入小写,输出大写,为什么报错?
  5. 京东五星电器送扫地机器人_家电也流行“套餐”,京东五星电器吹响国庆家装“集结号”...
  6. 论文浅尝 | 解决知识图谱补全中的长尾关系和不常见实体问题
  7. XSS-Game level 6
  8. Altium AD20中铺铜被导线分割的解决方法,如何正确覆铜整片区域
  9. 关于数据库查询时报“query block has incorrect number of result columns”
  10. jquery富文本编译器_jQuery 移动端artEditor富文本编辑器
  11. $.ajax()常用属性
  12. gps模拟器 matlab,基于Matlab/Simulink的数字中频GPS信号软件模拟器
  13. java后端英文_计算机程序员 前后台 英文怎么说
  14. mdt 计算机名_配置 MDT 部署共享规则
  15. c语言入门-程序运行的过程
  16. 调试笔记:BSOD 0xA
  17. 91 卫图与bigemap地图下载器功能对比
  18. matlab | 图像处理工具箱
  19. 传教士与野人过河问题
  20. 树型结构的四种建模方法

热门文章

  1. 优先队列 STL (转)
  2. MySQL连接超时自动断开连接问题
  3. console_init初始化的研究
  4. 【代码保留】IP地址排序(字符串分隔补齐)
  5. 北师大版图形的旋转二教案_北师大版三年级数学下册微课精讲+课件教案试卷(文末下载)...
  6. Linux音频驱动-PCM设备
  7. java中super和this_Java中this和super的用法总结
  8. C++设计模式10--命令模式(二)(Command)--降低请求发送者与接收者耦合
  9. ffmpeg主要数据结构及其之间的关系
  10. A - 棋盘问题 POJ - 1321(深搜)