一.mysql性能分析优化
1.cup
2.io
3.锁
4.服务器硬件
二.慢查询日志
1.show variables like 'show_query_log'(查询慢查询日志是否开启)
2.set global show_query_log=1(开启慢查询日志)
3.show variavles like 'long_query_time'(判断是慢查询日志)
4.show global status like '%Slow_querys%'(查询多少条慢sql)
5.mysqldumpslow --help(慢查询日志分析工具)
三.执行计划
1.explain关键字
2.id(id相同顺序执行,id不同,从大到小执行,id相同又不同,先执行大,然后相同顺序执行)
3.select_type(simple(简单查询),primary(主查询),derived(查询结果作为临时表),subquery(子查询,结果为单值),dependentsubquery(子查询结果为多值),union(第二个查询之后查询union))
4.table(表名)
5.type(类型(system>const>eq_ref>ref>range>index>ALL,效率从高到底)
6.possible_keys(可能用到的索引)
7.key(实际用到的索引)
8.key_len(索引的字节数,越短越好)
9.ref(显示索引哪一列被使用)
10.rows(索引扫描的行数)
11.extra(额外的显示信息)
四.索引优化
1.全值匹配,第一个字段一定要有索引
2.左侧法则,复合索引中间不能断
3.不要在索引列上做(计算,函数,自动类型转换),否则索引会失效
4.范围查询右边的索引列会失效
5.尽量使用覆盖索引,其实就是每列都在条件筛选中
6.<>或者!=会使所以失效,is null、is not null也会使所以失效
7.like中不能以%开头,否则索引会失效
8.字符串不叫单引号,会发生类型转换,索引会失效
9.or会使索引失效
五.order by和group by优化
1.order by(1.避免文件排序,效率比较低2.order by 最左用到索引,多个排序,索引列中间不能断3.Where子句与Order BY子句条件列组合满足索引最左前列)
2.group by(1.增大max_length_for_sort_data,增大sort_buffer_size,2.能用where过滤的别用having,3.先排序后分组)