mysqlMySQL学习

MySQL 性能优化常用手段

2016-07-07  本文已影响253人  ifool
  1. 在/etc/my.cnf配置MySQL记录慢查询日志:
    [mysqld] slow_query_log=1 long_query_time=0.5 log_queries_not_using_indexes=1

  2. 查看慢查询的相关配置:
    mysql> show variables like '%slow%';

  3. 使用mysqldumpslow分析慢查询日志:
    查看该命令的可用选项:
    mysqldumpslow -h
    找出平均查询时间最长的5条记录:
    mysqldumpslow slow_query_log_file -s at -t 5

  4. EXPLAIN分析
    table: 显示这一行的数据是关于哪张表的
    type: 显示连接是使用了何种类型,从最好到最差的连接类型为: const(主键查找)、eq_reg(唯一索引、主键范围查找)、ref(基于索引查找)、range(基于索引范围查找)、index(对索引进行扫描)、all
    possible_keys: 该表中可能会使用的索引
    key: 实际使用的索引
    key_len: 索引长度(越短越好)
    ref: 显示索引的哪一列被使用了(如果可能的话,是一个常数)
    rows: MySQL认为需要检查表的数据的行数
    extra: 当该字段出现如下值: 1、Using filesort; 2、Using temporary 时,表示SQL语句需要优化。

  5. 数据库表结构优化:
    1,使用可以存储下数据的最小数据类型。
    2,使用简单的数据类型(尽量使用int而不是varchar)。
    3,受限于InnoDB的存储特性,尽可能的使用NOT NULL定义字段。
    4,为了提高查询效率,减少查询时需要扫描的范围,尽量少用textblob类型的字段,如果要用,尽量把 textblob 类型的字段放到单独的表中。

  6. 表的垂直拆分原则:
    1,把不常用的字段单独放到一个表中。
    2,把大的字段单独放到一个表中。
    3,把经常一起使用的字段放到一个表中。

percona-toolkit: 提供了很多实用的工具
检查重复索引: pt-duplicate-key-checker -uroot -hlocalhost
慢查询分析: pt-query-digest slow_query_log_file

  1. innodb_stats_on_metadata 当启用此变量时(这是默认情况,与创建该变量之前相同),InnoDB在元数据语句执行期间更新统计数据,例如SHOW TABLE STATUS或SHOW INDEX,又或者当访问INFORMATION_SCHEMA的表TABLES或STATISTICS时。 (这些更新与ANALYZE TABLE时发生的事情类似。)当禁用时,在这些操作期间InnoDB不会更新统计信息。禁用此变量可以提高有大量的表或索引的架构(schemas) 的访问速度。它也可以提高涉及InnoDB表的查询的执行计划的稳定性。
    set global innodb_stats_on_metadata=off;
上一篇下一篇

猜你喜欢

热点阅读