索引是存储引擎用于快速找到记录的一种数据结构。索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高几个数量级,"最优"的索引有时比一个"好的"索引性能要好两个数量级。

索引可以包含一个(单列索引)或多个列(组合索引)的值。

想要使用组合索引首先要了解一个原则:最左前缀原则。如果索引包含多个列,那么列的顺序十分重要,因为 MySQL 只能高效地使用索引的最左前缀列。

最左前缀原则:

比如我们创建一个(A,B,C)组合索引,也就相当与创建了(A),(A,B),(A,B,C)三个索引。

这里需要注意的一点是,在满足最左前缀的原则下,索引字段的使用和顺序无关。

如:select * from test where B = '1' and A = '2';

上述语句也使用了索引,使用了(A,B)索引。

但是:select * from test where C = '1' and B = '2';

上述语句不能使用索引,不满足最左前缀原则。如果后面再加上 and A = '3' 则可以使用索引。

使用索引时需要注意的地方:

  • 首先要满足最左前缀原则 ,如果不是按照索引的最左列开始查找,则无法使用索引。

  • 不能跳过索引中的列。例如:where A = '1' and C = '3';在这当中,只有 A 能使用索引,C 不能使用索引。

  • MySQL 能在索引中做最左前缀匹配的 like 比较,但是如果是通配符开头的 like 比较,就不能使用索引。例如:like 'name%' 可以使用索引,like '%name' 则不能使用索引。

  • 如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查找。例如:where A = 'name' and B like 'name%' and C = 'name'; 这里只有 A,B 能使用索引,C不能使用索引。

  • where 条件中包含表达式或函数的参数不能使用索引。例如 where A + 1 = 2; 使用了表达式,不能使用索引。

  • "把 where 条件里面的列都建上索引"。这类说法是错误的。

  • 将选择性最高的列放在索引最前列。

  • order by 子句和查找型查询的限制是一样的,需要满足索引的最左前缀的要求。

EXPLAIN 命令:

EXPLAIN 语句输出结果的各个行的解释如下:

id:select 识别符,这是 select 查询序列号。

select_type: 表示查询中 select 类型,简单或复杂。

table:显示这一行的数据是关于哪张表的。

type:连接类型,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。一般来说,得保证查询至少达到 range 级别,最好能达到 ref。如果值为 index,则说明 MySQL 使用了索引扫描来做排序。

possible_keys :指出 MySQL 能使用哪个索引在表中找到行,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。

key: 显示 MySQL 在查询中实际使用的索引,若没有使用索引,显示为 NULL。

key_len :表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。

ref :表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值。

rows :表示 MySQL 根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。

Extra :包含不适合在其他列中显示但十分重要的额外信息。如 using where(这表示 MySQL 服务器将存储引擎返回行以后再应用 where 过滤条件);using index(使用了覆盖索引)。

转载于:https://www.cnblogs.com/woods1815/p/9973507.html

MySQL索引的使用及注意事项相关推荐

  1. Mysql索引介绍及使用注意事项,limit分页查询,慢查询分析

    Mysql索引介绍及使用注意事项,limit分页查询,慢查询分析 本文将从以下十二个方面进行介绍: 一.索引概念介绍 二.索引类型FULLTEXT,HASH,BTREE,RTREE有什么功能和性能上的 ...

  2. MYSQL索引使用技巧及注意事项

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

  3. mysql索引创建及使用注意事项

    总结: 1.在使用索引时,一般情况下不建议使用like操作.如果使用,则%放在后面.否则不会使用索引.like '%abd%'不会使用索引,而like 'aaa%'可以使用索引.(最左缀原则) 2.单 ...

  4. mysql索引创建和使用注意事项

    总结: 1.在使用索引时,一般情况下不建议使用like操作.如果使用,则%放在后面.否则不会使用索引.like '%abd%'不会使用索引,而like 'aaa%'可以使用索引.(最左缀原则) 2.单 ...

  5. 【转】 MySQL索引类型一览 让MySQL高效运行起来 mysql索引注意事项

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  6. MySQL索引类型总结和使用技巧以及注意事项

    在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: 复制代码代码如下: CREATE TABLE mytable(   ID INT NOT NULL,    u ...

  7. Mysql索引基本概念及案例总结(含索引的使用注意事项)

    Mysql索引基本概念及案例总结 键(Key)与索引(Index)关键字的区别 索引是键的列表,当我们定义一个key(外键除外,一般是PRIMARY KEY或者KEY形式)时就会产生对应的索引.一般情 ...

  8. MySQL索引类型一览 让MySQL高效运行起来

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...

  9. mysql索引总结----mysql 索引类型以及创建

    文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细.直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基 ...

  10. mysql distinct多个字段_深入浅出Mysql索引的那些事儿

    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重. 在数据 ...

最新文章

  1. php 打开动态链接,php调用com组件-dll文件(动态链接库)
  2. 论文简述 | 融合关键点和标记的基于图优化的可视化SLAM
  3. python设置画布背景图_如何使画布中的背景图像随窗口展开?
  4. 更新Android Studio 3.1.1碰到的问题
  5. 【目录】Django-2.0 学习笔记
  6. Sharepoint学习笔记—Site Definition系列-- 5、List Definition与List Template之比较
  7. 如何在Spring boot中修改默认端口
  8. PyTorch:存储和恢复模型并查看参数,load_state_dict(),state_dict()
  9. Eclipse Git下载问题:Internal error; consult Eclipse error log.
  10. 根据周次显示日期范围_Elasticsearch根据日期价格范围搜索酒店且排序
  11. 计算机算法设计与分析 第5版 (王晓东) 课后答案[解析]
  12. 苹果cms10好看的模板安全干净自适应黑色炫酷模板
  13. 账号密码都正确,使用jdbc连接远程服务器端mysql数据库报错:Access denied for user ‘root‘@‘DESKTOP-KJ79‘ (using password: YES)
  14. 常见知识库对比:DBpedia/Freebase/OpenCyc/Wikidata/YAGO3
  15. 一文详解IP地址:含义、作用、格式、分类等
  16. 红米NOTE5 ROOT教程
  17. 可等待计时器与用户计时器
  18. 手机软件的测试主要有哪些方面的测试,性能测试用什么去测试好
  19. CentOS部署ElasticSearch7.6.1集群
  20. vxWorks6.6下基于VxBus架构的Can控制器(sja1000t)驱动编写

热门文章

  1. html取消css样式,css如何取消样式
  2. 帆软决策报表全页面刷新或局部组件定时刷新
  3. Python项目开发基础 -- 函数参数与数据库连接参数
  4. 渔村小厂,如何成长为5G霸王
  5. mysql表空间查看及创建
  6. SCADA之父:物理隔离没什么用
  7. Nginx 读写分离详解
  8. 配置Spring的用于解决懒加载问题的过滤器
  9. 如何在WP7中使用自定义字体
  10. 真正的免费云时代来临,免费1T全能空间