一、MySQL优化概括
二、SQL优化
实践:
1.查看是否开启了慢查询日志
show variables like 'slow_query_log'
没有开启
2.查看是否开启了未使用索引SQL记录到日志
show variables like '%log%';
没有开启
3.查看慢查询多少秒才记录到日志
show variables like 'long_query_time';
4.查看慢查询日志位置
5.开启上面的一些配置
set global slow_query_log=on;//开启慢查询日志
set global log_queries_not_using_indexes=on;//开启记录没有用索引的SQL到慢查询
set global long_query_time=1;//超过1秒的查询记录到日志
6.MySQL慢查询日志分析工具mysqldumpslow,官方的
7.MySQL慢查询日志分析工具pt-query-digest,第三方、更好。SQL次数、百分比、具体SQL
8.如何分析SQL查询
9.explain实践,查看计划(SQL执行前都有执行计划)
10.具体的SQL优化
(1)count()和Max()的优化
(2)子查询优化
(3)group by的优化
(4)Limit查询的优化
(5)等等
三、索引优化
解释上面3个为什么:
1.一个索引包含了查询的所有列,那么称这个索引为覆盖索引。覆盖索引效率高
2.字段多导致一次索引获取数据量大,IO操作成本就会高
3.怎么知道离散度?select distinct,越高的离散度越好,排前面
重复冗余的索引不仅影响插入而且影响查询
复制粘贴,只要输入密码即可
四、数据库结构优化
1.
innodb中,对于Null的字段需要额外存储,尽量not null
2.垂直拆分
字段很多,拆分多个表,用外键(无论是不是物理上的)关联
3.水平拆分
把数据分到多个结构一致的表里去,上下太长(数据量多)需要水平切割。
五、系统配置优化
1.操作系统方面
表比较多的话,查询会占用文件数
2.MySQL本身配置优化方面
一个网站,点进去 向导式地教你,然后下载配置文件
六、硬件优化
非原创,学习整理