一.show status
show status命令(查看MySQL服务器状态信息),了解SQL执行频率。可显示日志,特定的数据库、表、索引、进程及权限表中的信息。具体如MySQL启动后的运行时间,当前MySQL客户端连接数、MySQL服务器执行的慢查询数、当前MySQL执行了多少select/insert/delete/update语句等统计信息,从而根据当前状态进行对应调整或优化
show [global|session(默认)] status like '状态项名称'
show status like 'Uptime' MySQL服务器已经运行时间
show status like 'com_select' 本次MySQL启动后执行select语句的次数
Innodb_rows_read Select查询返回行数
Innodb_rows_inserted 执行INSERT操作插入行数
Innodb_rows_updated 执行UPDATE操作更新行数
Innodb_rows_deleted 执行DELETE操作删除行数
--查看insert语句执行数
show [global] status like 'com_insert'
--查看update语句执行数
show [global] status like 'com_update'
--查看delete语句执行数
show [global] status like 'com_delete'
--查看试图连接到MySQL(不管是否连接成功)的连接数
show status like 'connections'
--查看线程缓存内的线程数量
show status like 'threads_cached'
--查看当前打开的连接数量
show status like 'threads_connected'
--查看创建用来处理连接的线程数.若Threads_created较大,可增加thread_cache_size值
show status like 'threads_created'
--查看激活的(非睡眠状态)线程数
show status like 'threads_running'
--查看立即获得的表锁次数
show status like 'table_locks_immediate'
--查看不能立即获得的表锁次数.若该值较高且有性能问题,应首先优化查询,然后拆分表或使用复制
show status like 'table_locks_waited'
--查看创建时间超过slow_launch_time秒的线程数
show status like 'slow_launch_threads'
--查看查询时间超过long_query_time秒的查询个数
show status like 'slow_queries'
二.explain
explain命令,可分析低效的SQL执行计划(MySQL是如何执行select语句信息),包括各个表之间何种联系,使用哪种index
explain select sum(amount) from customer a,payment b where 1=1 and a.customer_id = b.customer_id and email = "pay@zhaoyaojing.io"
--mysql在表中找到所需行的方式即访问类型
all index range ref eq_ref const/system null,性能变化是从差到好
三.optimize
optimize优化语句,支持myiasm和innodb表,允许用户恢复空间和合并数据碎片
optimize table table_name1,table_names
optimize命令针对myiasm和innodb两种存储引擎的表的优化方式不同,前者是先分析这张表,然后整理相关的MySQL datafile,最后回收未使用的空间。后者是recreate临时表+alter table整理空间+删除原始表+rename临时表+analyze to gather statistics
四.规范sql脚本书写
规范SQL脚本语句书写
1.避免select *
2.order by优化,order by语句非索引项或有计算表达都会降低查询速度
3.exists代替in
4.varchar代替char
5.能用distinct就不用group by
6.避免使用!= <>产生全表扫描