美文网首页
高性能Mysql-读书笔记-索引篇

高性能Mysql-读书笔记-索引篇

作者: 漫游鹰 | 来源:发表于2016-12-21 11:14 被阅读0次

索引篇

注:使用所有Mysql版本均为Mysql5.5以上,书上介绍的Mysql版本不超过5.0,所以书中部分内容已被Mysql本身优化,下面会具体说明。

1.Mysql只能高效利用多列索引的最左前缀列

PS:根据测试和网上查询资料,只要使用Mysql最左前缀列即可。多列索引,where中索引字段顺序与使用索引无关,Mysql会自动优化调整顺序,使用全部索引字段查询。

2.B+Tree索引适合全键值,键值范围,键值最左前缀查找

3.多列索引在不使用索引最左列的时候无法生效   

PS:应该是最容易被忽略的导致不走索引的情况

4.多列索引在跳过某列时,只能使用最左列索引

PS:在使用索引全部字段时,顺序与索引使用情况无关;但是在跳过中间部分索引列时,只能使用最左索引列,而且对查询性能影响很明显。

5.多列索引在某列存在范围查询时,其右边所以列都无法使用索引查询

6.索引将相关记录放到一起为一星,索引数据顺序和查询顺序一致为二星,索引包含查询需要的全部列为三星

7.索引列不能参与表达式计算或者作为函数参数

PS: in, not in, != 在高版本Mysql中可以走索引,前提扫描数据列不超过全表20%

8.前缀索引应该较长保证较高选择性,且不过长节省空间。一般前缀索引基数应该接近完整列基数

9.mysql5.0后引入索引合并,可以使用多个单列索引查询

10.但这不代表单列索引可以替代多列索引,服务器对多个单列索引进行操作的时候,需要消耗大量CPU和内存资源

PS:而且这部分优化,是不会计算在解释执行计划的开销内的,从而影响Mysql的最终执行。在极端情况下,会出现走索引性能反而不如不走索引。

11.InnoDB主键索引即为聚簇索引,应尽量避免随机索引,如UUID

PS:mysql索引是顺序存储,自增ID的性能明显好于随机ID

12.顺序主键在高并发下会造成明显的争用

13.索引覆盖在数据量较大且命中率不高的情况下才有明显性能提升

PS:查询数据列全部为索引字段时,Mysql可以扫描到索引字段就停止查询,不用再进行一次回表操作,减少IO来提升性能,称为索引覆盖

14.当索引列顺序和order by顺序一致且所有列排序方向一致时才能使用索引排序

15.索引(A,B)和索引(A)是冗余索引,而索引(B,A)和索引(A)则不是

16.InnoDB没有使用索引压缩,而MyISAM使用了。例如select count(*)时,索引由(A)改为(A,B),InnoDB不会有明显性能下降

17.应尽量避免在选择性低的列上建立索引

18.选择性低的列为前缀列且查询没用到时,可以增加 where column in (...) 来让查询匹配索引

PS:比如索引最左前缀列为sex,但是要查询全部性别的数据,可以使用where sex in ('male', 'female') and age>17 这样来保证查询使用索引

19.尽量把需要范围查询的列放在索引最后面,以便优化器能使用更多的索引列

20.可以使用延迟关联先查询主键,再关联全部数据列,以优化索引

相关文章

  • 05 MySQL-初识MySQL-索引-下

    04 MySQL-初识MySQL-索引-上 篇中介绍了InnoDB索引的数据结构模型以及索引维护。本篇继续针对My...

  • 高性能Mysql-读书笔记-索引篇

    索引篇 注:使用所有Mysql版本均为Mysql5.5以上,书上介绍的Mysql版本不超过5.0,所以书中部分内容...

  • 高性能MySQL-创建高性能索引

    1.1 索引基础 简单讲,索引就是书籍后面的“索引”-Index,帮助我们找到特定主题、词语,然后告诉我们具体对应...

  • 高性能mysql-高性能索引(二)

    前面一章,说的是数据类型设计,以及表设计的一些稍微值得注意的地方。这一章,说索引,简单的基础知识就跳过,说一些稍微...

  • MYSQL-创建高性能的索引

    1.MySQL索引的基础 索引:类似于书籍的目录,想找到一本书的某个特定的主题,需要先找到书的目录,定位对应的页码...

  • mysql-索引篇-Cardinality

    总结下来cardinality列的值有以下特性: 1. 列值代表的是此列中存储的唯一值的个数(如果此列为prima...

  • mysql-索引

    mysql-索引 按数据结构分类 B树索引-NOSQL使用较多 B+树索引 hash索引-KV数据库上比较常见 位...

  • MYSQL-索引

    MYSQL-索引 概述 用来加快查询的技术很多,其中最重要的是索引。通常索引能够快速提高查询速度。如果不适用索引,...

  • MYSQL-索引

    1.mysql的索引分为单列索引(主键索引-不允许空值,唯一索引-允许空值,普通索引)和组合索引. 单列索引:一...

  • mysql-索引

    索引 索引是指一种数据库储存时,是否对数据进行处理,得到的一个类似于目录一样的快速查找的对象使用下列操作时,会用到...

网友评论

      本文标题:高性能Mysql-读书笔记-索引篇

      本文链接:https://www.haomeiwen.com/subject/twqkmttx.html