索引优化建议

在MySQL中要尽可能使用覆盖索引进行检索,只访问索引的查询(索引列和查询列一致),减少select * 可提高查询效率

覆盖索引(Covering Index)

  1. 理解方式一:

就是select的数据列只用从索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。

  1. 理解方式二:

索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了(或覆盖了)满足查询结果的数据就叫做覆盖索引。

注意:

如果要使用覆盖索引,一定要注意select列表中只取出需要的列,不可select *,

因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。

案例对比

  1. 使用select * 查询结果分析
mysql>explain select * from user where name="tim" and age=12 and pos="CFO";

结果:我们发现select * 查询执行结果的Extra是NULL

  1. 索引列查询结果分析
mysql>explain select name,age,pos from user where name="tim" and age=12 and pos="CFO";

结果:我们发现select * 查询执行结果的Extra是Using index

案例结论对比分析

注意:Using index:表示直接访问索引就足够获取到所需要的数据,不需要通过索引回表,所以Extra的执行效率排序是Using index最快

using index :使用覆盖索引的时候就会出现

using where:在查找使用索引的情况下,需要回表去查询所需的数据

using index condition(mysql5.6以后才出来的新特性):会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行,查找使用了索引,但是需要回表查询数据。

using index & using where:查找使用了索引,但是需要的数据都在索引列中能找到,所以不需要回表查询数据

排序:using index > using index & using where > using index condition > using index

案例1、案例2结论对比分析:当我们使用了索引列查询,效率要高于select *

点击关注发私信或评论交流文章中有问题的地方,相互学习和答疑

linux select读取节点数据失败_MySQL中覆盖索引查询和select*查询执行结果案例分析...相关推荐

  1. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...

  2. python的xlrd读取Excel数据失败: raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+‘; not supported‘) ...

    python的xlrd读取Excel数据失败: raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported') xlr ...

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

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

  4. mysql innodb索引覆盖_Mysql InnoDB 覆盖索引与回表

    什么是回表查询? InnoDB使用聚集索引,数据根据主索引存储在叶子节点上,辅助索引的data域存储主键. myisam使用非聚集索引,即主索引(B+树)的叶子节点存储数据的地址(需要回表),myis ...

  5. linux串口读取mpu9250数据,模拟 I2C 读取 MPU9250 数据的测试笔记

    硬件:STM32F103ZET6 + GY9250 软件:Keil MDK(v5.27)+ STM32CUBEMX(v5.2.1) 这里我在使用STM32CUBEMX最新版本(v5.5.0)生成Kei ...

  6. mysql添加临时索引_mysql 中添加索引的三种方法

    在mysql中有多种索引,有普通索引,全文索引,唯一索引,多列索引,小伙伴们可以通过不同的应用场景来进行索引的新建,在此列出三种新建索引的方法 mysql 中添加索引的三种方法 1.1 新建表中添加索 ...

  7. mysql 中间表的好处_Mysql中使用中间表提高统计查询速度

    对于数据量较大的表,在其上进行统计查询通常会效率很低,并且还要考虑统计查询是否会对在线的应用产生负面影响.通常在这种情况下,使用中间表可以提高统计查询的效率, 下面通过对session 表的统计来介绍 ...

  8. mysql替换首字母_MySQL中使用replace、regexp进行正则表达式替换的用法分析

    这篇文章主要介绍了MySQL中使用replace.regexp进行正则表达式替换的用法,结合具体实例形式分析了replace.regexp正则替换的使用技巧与相关注意事项,需要的朋友可以参考下 本文实 ...

  9. js mysql替换_MySQL中使用replace、regexp进行正则表达式替换的用法分析

    本文实例讲述了MySQL中使用replace.regexp进行正则表达式替换的用法.分享给大家供大家参考,具体如下: 今天一个朋友问我,如果将数据库中查到的类似于"./uploads/110 ...

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第28期)
  2. Spring Boot + Mybatis 多模块(module)项目的完整搭建教程
  3. JGG:微生物组学专刊(赵方庆、白洋、张志刚、王军、郑钜圣、魏泓、沈伟、刘永鑫等)...
  4. 独家 | 6大角度击破数据科学面试套路!助你找到理想工作
  5. Java发邮件-QQ服务器认证
  6. Spark On MaxCompute如何访问Phonix数据
  7. 突破C++的虚拟指针--C++程序的缓冲区溢出攻击
  8. 58 - 算法 - 百练 2503:Babelfish 二分查找与存储
  9. 数组 排序 查找 多维数组
  10. Django之模型层
  11. 我也有了博客了,呵呵~~
  12. 对称密钥和非对称密钥有什么区别,区别在哪里
  13. linux 删除用户 currently logged in,userdel删除用户失败提示:userdel: user * is currently logged in 解决方法...
  14. 目标检测:损失函数之SmoothL1Loss
  15. 冰柱图分析:学习笔记
  16. Windows10黑体字体
  17. 3-33在图 3-31中,以太网交换机有6个接口,分别接到5台主机和一个路由器。在下面表中的“动作”一栏中,表示先后发送了4个帧。假定在开始时,以太网交换 机的交换表是空的。试把该表中其他的栏目都填写
  18. Windows Phone 7体验
  19. 第六周——爬虫入门 Day4 8.4
  20. 山东大学单片机原理与应用实验 4.1 按键声光报警实验

热门文章

  1. 记一次分布式B站爬虫任务系统的完整设计和实施
  2. 写一个高性能的敏感词检测组件
  3. [转]Android 常见安全漏洞修复理论与实践
  4. Android studio之Unknown run configuration type AndroidRunConfigurationType解决办法
  5. Android之 AudioTrack学习
  6. python函数返回多个值时的数据类型是_Python3 注释多个返回值的函数类型
  7. 里rust怎么找蓝图_Rust错误处理
  8. php yii 插入,Yii2 批量插入、更新数据实例
  9. bigint hive java类型_详解Apache Hudi如何配置各种类型分区
  10. 这个避孕套让生活更和谐……