mysql优化常用步骤

SQL优化
步骤
1,通过show status like 'Com_%' 查询数据库以查询为主还是以更新为主,以及各种sql的大致执行比例是多少,对于事务型的应用,通过Com_commit和Com_rollback可以了解事物提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。
show status like 'Com_select' ;
show status like 'Com_update' ;
show status like 'Com_delete' ;
show status like 'Com_insert' ;
。。。。
2,通过慢日志查询执行效率较低的sql
3,通过EXPLAIN分析低效SQL的执行计划,通过慢日志查查询到效率较低的sql以后,可以通过EXPLAIN或者DESC命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序,语法如下:
EXPLAIN select sum(amount) from customer a, payment b where 1=1 and a.customer_id = b.customer_id ;
4,通过show profile分析sql
show PROFILES ;  -- 查看sql的执行过程
show PROFILE FOR QUERY 77 ;  -- 查看sql执行过程中线程的每个状态和耗时
5,通过trace分析优化器如何选择执行计划
6,确定问题并采取相应的优化措施
a>索引:通过以上分析考虑给某些字段增加索引。


常用的sql优化
     1,大批量的插入插入数据


     2,优化insert语句
          如果同一客户插入很多行,应尽量使用多个值表的insert语句,这种方式将大大缩减客户端数据库间的连接、关闭等消耗,使得比执行单个insert语句性能要快,如下:
insert into test values(1,2),(1,3)(1,4)....
         如果从客户不同插入很多行,可以使用insert delayed语句得到更高的效率。delayed的意义是让insert语句立即执行,其实数据都存放在了内存的队列当中,并没有写入磁盘,这比每条语句分别插入要快的多。
    3,优化order by语句
          尽量减少额外的排序,通过索引直接返回索引数据,where条件和order by条件使用相同的索引,并且order by的顺序和索引顺序相同,并且排序字段同为升序或者同为降序。
    4,优化group by语句
          和优化order by语句类似,如果查询包含group by但是想要避免排序结果的性能消耗,可以使用order by null 禁止排序
    5,优化嵌套查询
          尽量使用join避免使用where后的子查询,因为join会走索引,但是where条件后的子查询会全表扫描。
    6,优化or条件
          对于含有or的查询子句,如果要利用索引就需要在or的两边都有索引;如果没有索引则考虑增加索引。
    7,优化分页查询
          1,在索引上执行分页操作,再根据子查询关联回原表所需要的查询内容。例如:
              select a.* from A a inner join (select b.id from B b order by b.cdate limit 50,5) t on a.id = t.id ;
           2,把limit查询换成某个位置的查询,例如分页到了41页,当要查询第42页时,可以提前记录41页最后一条记录的ID,比如第41行最后一条记录的ID的2000,sql如下:
select * from A where id > 2000 limit 10 ;

你可能感兴趣的:(mysql)