mysql的优化基础知识
1.查看各种SQL执行的频率
mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连接mysql服务的次数),uptime(mysql工作时间),slow_queries(慢查询次数)等等
如:
2.定位执行效率较低的SQL语句
通过慢查询日志,定位查询效率低下的SQL语句,然后分析语句进行优化
3.通过explain或desc分析SQL语句的执行计划,如要查看所访问的分区使用explain partitions
其中,type: index //扫描方式,效率由低到最好 all(全表)->index(索引全扫描)->range(索引范围扫描)->ref(非唯一索引)->eq_ref(唯一索引)->const/system->null
4.使用profile分析SQL,profile就是详细地列出SQL语句执行过程
mysql> set profiling=on --开启 OFF--关闭
再次查看状态:
查看某个查询语句执行过程每个状态以及消耗的时间
优化表的作用主要是对表空间的碎片进行合并以及回收删除或更新造成浪费的空间
8.常用SQL优化
加载大量数据时,关闭非唯一索引,取消唯一性检查,以及取消自动提交以提高插入速度
set unique_checks=0
alter table stu disable keys
set autocommit=0
load load infile........
alter table stu enable keys
set unique_checks=1
set autocommit =1
where条件和order by 字段使用相同的索引,并且order by的顺序和索引顺序相同,还有order by的字段都是降序或者升序。例如:
以下情况会使用索引,前提(key-part1,key_part2)为联合索引
select * from tbl_name order by key_part1,key_part2....;
select * from tbl_name where key_part1=xxx order by key_part1,key_part2....;
select * from tbl_name order by key_part1 asc,key_part2 asc....;
以下情况则不会使用索引,(key1,key2分别建立索引)
select * from tbl_name order by key1,key2....;
select * from tbl_name where key1=xxx order by key2;
select * from tbl_name order by key_part1 asc,key_part2 desc....;
SELECT查询时最好指定具体的字段名,SELECT * 会选择所有字段,会增加排序区的使用,降低SQL性能。
起点在哪,或许选择不了。重要的是,你追求的终点在哪!