优化分析
SQL性能下降的表现
- 执行时间长
- 等待时间长
SQL性能下降的原因
- 查询语句写的不好:各种连接以及子查询,导致没用上索引或者就没有建立索引。
- 建立的索引失效:建立了索引,在真正执行的时候,索引失效了导致没用上索引。
- 关联查询使用了太多的Join。
- 服务器优化和参数配置不合适:如果设置的不合理,比例不恰当也会导致性能下降,SQL变慢。
索引
什么是索引
索引是一个帮助MySQL高效获取数据的一种数据结构,类似字典的索引目录可以通过索引快速的查找到排好序的数据。
为什么要建立索引
为了提高查询数据的效率
建立索引的优势
- 提高了数据检索的效率,降低了数据库IO的开销
- 通过索引对数据进行排序,降低了排序的成本,降低了CPU的消耗
建立索引的劣势
- 索引是以文件的形式存储在磁盘中。会占用空间。
- 索引也是一张表,该表保存了主键与索引字段并指向实体表的记录。所以也占空间。
- 更新表时,MYSQL不仅要保存数据,还要对索引文件进行保存,每次更新添加了索引的字段就会导致性能下降。
- 索引提高了查询速度但是降低了更新速度。
- 会调整因为更新带来的键值变化后索引的信息。
索引尽量加在经常用来查询的字段上,避免加在那些常常发生变化的字段上。
索引的分类
- 单值索引:一个索引只包含单个列,一个表可以有多个单值索引。
- 唯一索引:索引列的值必须唯一,但是可以有空值
- 复合索引:一个索引包含多个列
- 全文索引:MYSQL全文检索是利用查询关键字和查询列内容的相关度进行检索,可以利用全文检索列来提高匹配的速度。