美文网首页
一篇解决MySQL索引优化

一篇解决MySQL索引优化

作者: 玄冰0825 | 来源:发表于2019-03-03 22:23 被阅读0次

    定义:帮助MySQL高效获取数据的数据结构。简单理解为排好序快速查找数据(BTree)结构。以索引文件的形式存储在磁盘上。


    平常所说的索引默认为BTree结构组织的索引,其中聚集索引、次要索引、复合索引、前缀索引、唯一索引默认都是使用B+树索引,除此外还有哈希索引等。


    • 优势:提高检索效率,降低数据库IO成本;索引列对数据排序,降低数据排序成本,降低CPU消耗。
    • 劣势:实际上索引也是一张表,该表保存主键与索引字段,并指向实体表的记录,所以索引列也要占空间;虽然索引提高查询速度,同时会降低表更新速度,因为mysql不仅要保存数据,还要保存索引文件每次更新添加索引列的字段。

    分类:单值索引、唯一索引、复合索引


    • 需要创建索引情况:1、逐渐自动建立唯一索引;2、频繁作为查询条件的字段;3、外键关系建立索引;4、排序字段作索引提升排序速度;5、统计或分组字段作索引。
    • 不需要建索引情况:表记录少(<300W);频繁更新字段;where条件里用不到的字段;索引列中重复数据多。

    索引优化

    1. left join:根据左连接特性,leftjoin用于确定如何从右表搜索行,左边一定有,故而右边是关键点,要建索引。
    2. 同理right join左边表建索引。
    3. 防止索引失效的十条
      (1)全值匹配我最爱
      (2)最佳左前缀法则 —— 组合索引中要遵循最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中的列。
      (3)不在索引列上做任何操作,包括计算、函数、自动或手动类型转换,会导致索引失效而全表扫描。
      (4)索引中范围条件右边的列都失效
      (5)尽量使用覆盖索引,减少select *
      (6)在使用!= <>的时候无法使用索引
      (7)is null,is not null无法使用索引
      (8)like以通配符开头,如'%abc...'无法使用索引,'abc...%'这样的可以。
      若非要使用'%abc%',那么select的字段不能超过索引列。
      (9)字符串不加单引号索引失效
      (10)少使用or,做连接时索引失效

    相关文章

      网友评论

          本文标题:一篇解决MySQL索引优化

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