• mysql 通过索引进行优化


    前面说了mysql的索引为啥用B+树,下面来说说索引的分类

    索引一般分为以下几类:

      主键索引:当创建表的时候如果包含主键,数据库就会默认给主键添加索引

      唯一索引:表中唯一列添加的索引

      普通索引:又叫二级索引或者辅助索引,表示的是除了主键、唯一键添加的索引

      全文索引:一般在varchar、char或者text这样的类型里面才会建全文索引,全文索引类似于全文检索

      组合索引:一般在创建索引的时候都会选择单列,在某些情况下需要给多个列添加一个索引,此时组成了组合索引

    了解完索引,再看看索引中常用的几个技术名词

      回表:先通过数据库索引扫描出数据行所在的行,再通过主键id取出索引中未提供的数据,即基于非主键索引查询需要多扫描一棵索引树

      覆盖索引:和回表相反的概念,在索引的叶子节点中如果能获取到查询的所有列数据,无需回表的过程称之索引覆盖。注意:在大多数存储引擎中,覆盖索引只能覆盖那些只访问索引中部分列的查询。不过,可以进一步的进行优化,可以使用innodb的二级索引来覆盖查询

      最左匹配:在一个表中,如果有组合索引,组合索引在进行查询时,遵循最左匹配原则,表示必须要先匹配到第一列之后才开始匹配第二个列,无法直接匹配第二个列的值

      索引下推:5.6之后新增的功能,数据筛选的过程下移到存储引擎层来完成,而不是在server层,注意:索引下推一定是在联合索引的情况下,根据联合索引本身就有的数据直接做一次过滤,而不用再进行多次无用的回表再到Server层进行过滤,explain看执行计划的时候,Using index condition并不代表一定是使用了索引下推,只是代表可以使用,但是不一定用了

      聚簇索引与非聚簇索引:所谓的聚簇索引并不是单独的索引类型,而是一种数据存储方式,指的是数据跟对应的索引列紧凑的存储在一起,非聚簇索引指的是数据跟索引分开存储

    优化细节:

      1 当使用索引进行查询不要使用表达式,把计算放在业务层

      2 尽量使用主键查询,而不是其他索引,主键查询不会触发回表操作

      3 要创建索引的字符串比较长的时候,可以考虑使用索引前缀来创建,提高数据检索的效率

      4 使用索引扫描来排序

      5 union all,in,or都能够使用索引,但是推荐使用in(绝大数in比较快)

      6 范围列可以用到索引,索引最多用于一个范围列

      7 强制类型转换会全表扫描

      8 更新频繁不适合索引

      9 创建索引的列,不允许为null

      10 表连接最好不要超过三张表

      11 能使用limit尽量用limit

      12 单表索引建议在5个字段之内

      13 对于组合索引来说,单索引字段数不允许超过5个

      14 创建索引避免以下错误概念: 索引越多越好;过早优化,在不了解系统的情况下优化

      

  • 相关阅读:
    03构建之法阅读笔记3—团队模式
    软件工程学习进度博客10
    第一阶段冲刺10
    第一阶段冲刺9
    第一阶段冲刺8
    第一阶段冲刺7
    第一阶段冲刺6
    第一阶段冲刺5
    团队项目冲刺第六天
    团队项目冲刺第五天
  • 原文地址:https://www.cnblogs.com/hzzjj/p/15811777.html
Copyright © 2020-2023  润新知