1.
| 
					 1  | 
						show full processlist;  | 
					
使用上面的命令可以查询当前SQL语句的信息,其中包括运行时间。
2.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12  | 
						mysql> explain select * from tickets\G *************************** 1. row ***************************            id: 1   select_type: SIMPLE         table: tickets          type: ALL possible_keys: NULL           key: NULL       key_len: NULL           ref: NULL          rows: 4         Extra:  | 
					
在select语句前面添加explain可以查看SQL语句的查询执行计划(QEP), 根据此结果,可以查看SQL语句执行的相关信息。
key:索引的信息,NULL指没有索引。
rows:查询影响的行数。
3.
| 
					 1 2  | 
						show create table table_name\G show table status like table_name\G  | 
					
SQL语句优化之前,首先执行上面的两个命令,对表结构做检查。
show table status命令可以查看数据库表的底层大小以及表结构,其中包括存储引擎类型,版本,数据和索引大小,行的平均长度以及行数。如果是InnoDB引擎,值为估计值并且可能有很大的误差。
4.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21  | 
						mysql> explain extended select * from tickets\G *************************** 1. row ***************************            id: 1   select_type: SIMPLE         table: tickets          type: ALL possible_keys: NULL           key: NULL       key_len: NULL           ref: NULL          rows: 4      filtered: 100.00         Extra: 1 row in set, 1 warning (0.00 sec) mysql> show warnings\G *************************** 1. row ***************************   Level: Note    Code: 1003 Message: select `test`.`tickets`.`tid` AS `tid`,`test`.`tickets`.`aid` AS `aid`,`test`.`tickets`.`tTitle` AS `tTitle`,`test`.`tickets`.`tContent` AS `tContent`,`test`.`tickets`.`tType` AS `tType`,`test`.`tickets`.`tRemark` AS `tRemark`,`test`.`tickets`.`tHasSubTicket` AS `tHasSubTicket`,`test`.`tickets`.`tsid` AS `tsid`,`test`.`tickets`.`tCreated` AS `tCreated`,`test`.`tickets`.`tUpdated` AS `tUpdated`,`test`.`tickets`.`tDeleted` AS `tDeleted`,`test`.`tickets`.`tStatus` AS `tStatus` from `test`.`tickets` 1 row in set (0.00 sec)  | 
					
explain 的extended 扩展能够在原本explain的基础上额外的提供一些查询优化的信息,这些信息可以通过mysql的show warnings命令得到。上面可以看到select * 被优化了。
5.
| 
					 1  | 
						mysqldump -uroot -p --no-data -e test  tickets > tmp/ticket.sql  | 
					
mysqldump工具能够快速生成用户模式或数据库实例中所有表的定义。
-e 是数据库名称,tickets 是表名。–no-data 指的是不导出表的数据。
通过cat tmp/ticket.sql 查看相关表结构。
6.
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20  | 
						mysql> flush status; Query OK, 0 rows affected (0.00 sec) mysql> select count(*) from wp_posts where post_parent !=0\G *************************** 1. row *************************** count(*): 30 1 row in set (0.00 sec) mysql> show session status like 'handler_read%'; +-----------------------+-------+ | Variable_name         | Value | +-----------------------+-------+ | Handler_read_first    | 1     | | Handler_read_key      | 1     | | Handler_read_next     | 30    | | Handler_read_prev     | 0     | | Handler_read_rnd      | 0     | | Handler_read_rnd_next | 0     | +-----------------------+-------+ 6 rows in set (0.00 sec)  | 
					
Handler_read_first 代表读取索引头的次数,如果这个值很高,说明全索引扫描很多。
Handler_read_key代表一个索引被使用的次数,如果我们新增加一个索引,可以查看Handler_read_key是否有增加,如果有增加,说明sql用到索引。
Handler_read_next 代表读取索引的下列,一般发生range scan。
Handler_read_prev 代表读取索引的上列,一般发生在ORDER BY … DESC。
Handler_read_rnd 代表在固定位置读取行,如果这个值很高,说明对大量结果集进行了排序、进行了全表扫描、关联查询没有用到合适的KEY。
Handler_read_rnd_next 数值越大,代表进行了很多表扫描,查询性能低下。