mysql提供了explain做为查询优化的工具,便于帮助咱们分析查询sql的问题和性能瓶颈mysql
explain相关的参数详解sql
EXPLAIN tbl_name 前者能够得出一个表的字段结构工具
EXPLAIN [EXTENDED] SELECT select_options 后者主要是给出相关的一些索引信息性能
例子:优化
1.使用慢查询分析spa
在my.ini中:日志
long_query_time=1orm
log-slow-queries=d:\mysql5\logs\mysqlslow.logblog
把超过1秒的记录在慢查询日志中排序
能够用mysqlsla来分析之。也能够在mysqlreport中,有如
DMS分别分析了select ,update,insert,delete,replace等所占的百份比
innodb_flush_log_at_trx_commit=1
表示事务提交时当即把事务日志写入磁盘,同时数据和索引也更新。
innodb_flush_log_at_trx_commit=0
事务提交时,不当即把事务日志写入磁盘,每隔1秒写一次
innodb_flush_log_at_trx_commit=2
事务提交时,当即写入磁盘文件(这里只是写入到内核缓冲区,但不当即刷新到磁盘,而是每隔1秒刷新到盘,同时更新数据和索引
3.MYISAM和INNODB的锁定
myisam中,注意是表锁来的,好比在多个UPDATE操做后,再SELECT时,会发现SELECT操做被锁定了,必须等全部UPDATE操做完毕后,再能SELECT
innodb的话则不一样了,用的是行锁,不存在上面问题。
4.MYSQL中的组合索引
假设表有id,key1,key2,key3,把三者造成一个组合索引,则
如:
where key1=....
where key1=1 and key2=2
where key1=3 and key3=3 and key2=2
根据最左原则,这些都是可使用索引的,如from test where key1=1 order by key3,用explain分析的话,只用到了normal_key索引,但只对where子句起做用,然后面的order by须要排序。