ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL索引优化

2020-03-29 10:53:07  阅读:181  来源: 互联网

标签:建立 更新 查询 索引 MySQL 失效 排序 优化


SQL性能下降原因

SQl性能下降会导致执行时间长,等待时间长。

导致SQL性能下降的原因有4点:

  • 查询语句写的不好
  • 索引失效
  • 关联查询,太多join
  • 服务器调优以及各个参数设置,比如缓冲、线程等

索引简介

索引是帮助MySQl高效获取数据的数据结构,索引是数据结构。索引的目的在于提高查询效率,在这些数据结构的基础上实现高级查找算法。

索引本身很大,往往以索引文件的形式存储在磁盘上,一般索引都是B树结构、B+树结构、哈希结构。

索引优缺点

索引优点:

  • 降低数据库的IO开销,提高检索效率后,读取的数据少了
  • 降低CPU的消耗,排序的时候直接通过索引排序

索引缺点:

  • 索引也要占用空间
  • 提高了查询速度,降低了更新表的速度,更新数据的同时,还要对其建立索引,因此速度慢了
  • 很难建立最优的索引

索引分类

  • 单值索引:一个索引只包含单个列,一个表可以有多个单列索引
  • 唯一索引:索引列的值必须唯一,允许有空值
  • 复合索引:一个索引包含多个列

建立索引的情况

  1. 主键自动建立唯一索引
  2. 频繁作为查询条件的字段应该建立索引
  3. 查询中与其他表关联的字段,外键关系建立索引
  4. 频繁更新的字段不适合建立索引,每次更新数据需要更新索引
  5. where条件里用不到的字段不创建字段
  6. 查询中要排序的字段,排序字段通过索引,会提高排序速度

其中,表记录太少(百万以下),频繁更新的表,数据重复且分布平均的字段,这些情况不适合建立索引。

索引优化

避免范围查询,会使索引失效。等值查询是最优的。多表查询时,小表驱动大表,小表建立索引。尽量使用覆盖索引,只访问索引的查询。

索引失效情况

  1. 最佳左前缀法则,如果索引多列,要遵守最左前缀法则,查询从最左前列开始,否则索引失效。如果查询字段跳过索引中间列,会造成索引部分使用,部分失效。
  2. 不在索引列上做任何操作,计算,函数等,会导致索引失效而转向全表扫描。
  3. 范围查询会使索引失效。
  4. 使用!=和<>的时候会使索引失效导致全表扫描
  5. is null,is not null也会使索引失效
  6. like'%string',%开头会使索引失效,可以放右边。或覆盖索引,避免索引失效。
  7. 字符串不加单引号,索引失效
  8. or连接时,索引失效

标签:建立,更新,查询,索引,MySQL,失效,排序,优化
来源: https://www.cnblogs.com/chenshaowei/p/12591162.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有