数据库优化
数据库优化系列
通过性能分析工具可以让我们了解执行慢的 SQL 都有哪些,查看具体的 SQL 执行计划,甚至是 SQL 执行中的每一步的成本代价,这样才能定位问题所在,找到了问题,再采取相应的行动。
优化 SQL 语句的步骤
通过开启慢查询日志来收集慢查询
开启慢查询日志set global slow_query_log='ON';
设置慢查询时间set global long_query_time=2;
设置慢查询日志的文件位置set global slow_query_log_file='/var/lib/mysql/instance-1-slow.log';
通过慢查询日志我们就知道是哪些SQL慢了,然后我们就针对性地用 EXPLAIN 查看这条语句的执行计划,我们于是知道了数据表的访问类型,用到的索引,扫描的行数,一目了然!
- type:数据表的访问类型,比如all就是全表扫描;possible_keys:可以使用的索引;key:实际使用的索引;rows:扫描行数
使用 SHOW PROFILE 可以查看语句的具体执行成本
PROFILE默认关闭,开启她set profiling = 'ON';
然后show profile;查看有哪些查询,用show profile for query ID可以查看某个查询每一步的执行时间
慢 SQL 语句的几种常见诱因
索引设计的不好,我们要好好的重新设计,比如说我们设计一个联合索引以索引覆盖的形式避免回表
MySQL语句写的不好,慢查询日志查一下哪条语句出问题,想办法把它改好,比如说没遵守最左前缀原则导致索引失效,再比如说InnoDB的count()傻傻的一行行数实在太慢了那我们可以建一个表专门存各个表的count()
锁等待时间太长,我们一般把容易产生资源竞争的锁往后放,减少一个事务占用这把锁的时间
MySQL选错索引了,我们可以用force index强制MySQL选择某个索引,比如说强制MySQL使用id这个索引select * from id force index(id) where id between 10000 and 20000;

深信服公司福利 896人发布