mysql性能分析与优化

Posted 幸运儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql性能分析与优化相关的知识,希望对你有一定的参考价值。

Hash索引的限制 

  Hash索引必须进行二次查找

  Hash索引无法用于排序

  Hash索引不支持部分索引查找,也不支持范围查找

  Hash索引中Hash码的计算可能存在Hash冲突

 

为什么要使用索引

  索引大大减少了存储引擎需要扫描的数据量

  索引可以帮助我们进行排序以避免使用临时表

  索引可以把随机I/O变为顺序I/O

 

索引优化策略

  索引列上不能使用表达式或函数

  前缀索引和索引列的选择性,索引的选择性是不重复的索引值和表的记录数的比值

 

联合索引

  如何选择索引列的顺序

  经常会被使用到的列优先

  选择性高的列优先

  宽度小的列优先

 

覆盖索引

  优点:

  可以优化缓存,减少磁盘IO操作

  可以减少随机IO,变随机IO操作变为顺序IO操作

  可以避免对Innodb主键索引的二次查询

  可以避免MyISAM表进行系统调用

  无法使用覆盖索引的情况:

  存储引擎不支持覆盖索引

  查询中使用了太多的列

  使用了双%号的like查询

 

使用索引来优化查询

  使用索引扫描来优化排序

  通过排序操作

  按照索引顺序扫描数据

  索引的列顺序和Order By子句的顺序完全一致

  索引中所有列的方向(升序,降序)和Order by子句完全一致

  Order by中的字段全部在关联表中的第一张表中

 

模拟Hash索引优化查询

  只能处理键值的全值匹配查找

  所使用的Hash函数决定着索引键的大小

 

删除重复和冗余的索引

 

查找未被使用过的索引

 

更新索引统计信息及减少索引碎片

  analyze table table_name

  optimize table table_name 使用不当会导致锁表

 

如何获取由性能问题的sql

  通过用户反馈获取存在性能问题的SQL

  通过慢查日志获取存在性能问题的SQL

  实时获取存在性能问题的SQL

 

使用慢查询日志获取有性能问题的SQL

slow_query_log 启动停止记录慢查日志  set global

slow_query_log_file 指定慢查询日志的存储路径及文件(日志存储和数据存储分开存储)

long_query_time 指定记录慢查日志SQL执行时间的伐值 (记录所有符合条件的SQL)

 

常用的慢查询日志分析工具 (mysqldumpslow)

  汇总除查询条件外其他完全相同的sql,并将分析结果按照参数中所指定的顺序输出

  mysqldumpslow -s r -t 10 slow-mysql.log

  -s order(c,t,l,t,at,al,ar) 指定按哪种排序方式输出结果

  c :总次数

  t :总时间

  l :锁的时间

  r :总数据行

  at,al,ar:t,l,r平均数

  

  -t top 指定取前几条作为结束输出

  

 

常用的慢查日志分析工具(pt-query-digest)

  pt-query-digest \

  --explain h=127.0.0.1,u=root,[email protected] \

  slow-mysql.log

 

以上是关于mysql性能分析与优化的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL索引结构原理性能分析与优化

MYSQL数据库服务CPU高问题分析与优化

mysql性能优化-索引与优化

mysql性能分析与优化

高性能MySql-Schema与数据类型优化1

由浅入深探究mysql索引结构原理性能分析与优化