mysql优化

1.优化考虑

sql及索引优化、表结构、系统配置、硬件

 

2.SQL优化

开启慢查询日志:slow_query_log  log_queries_not_using_indexes   long_query_time

使用mysqldumpslow或pt-query-digest

找到具体SQL后,使用执行计划explain进行分析

SQL优化: count max等函数的优化,子查询用join优化,group by优化,limit查询优化,具体问题具体分析,增加些过滤条件

 

3.索引的优化

哪些列建索引: where, group by, order by, on

索引列越小越好,联合索引需要考虑列的位置(离散度大的放在前面)

过多索引会影响效率,通过information_schema数据库或用pt-duplcate-key-checker找出重复及冗余索引

变更后用不到的索引就删除: pt-index-usage slow.log

 

4.数据库结构优化

选择最合适的数据类型

小、简、not null、无text

范式化:一般遵循第三范式(无传递式的依赖,冗余、删除异常、更新异常、插入异常)

反范式化:适当增加冗余,空间换取时间

表的垂直拆分:根据业务情况,很少用的、数据大的(小的)等

表的水平拆分:id  date等,跨分区表的查询以及统计或报表的处理挑战

 

5.系统的优化

操作系统优化:网络连接优化、文件数的限制、关闭防火墙、磁盘及分区

MySQL配置优化:MySQL的参数(缓冲池、日志缓冲池、变更刷新磁盘(0,1,2)、读写IO线程数、共享表空间、刷新统计信息),使用percona工具分析

 

6.硬件优化

CPU、IO等,考虑HA、读写分离等。

 

7.count(col)和count(*)

在有无索引的情况下和在该列能为NULL的

列越靠后,count(col)越慢

 

8.列最好不允许为空

 

 

 

 

你可能感兴趣的:(mysql)