1.数据库优化得目的
2.可以从哪些方面进行数据库优化
3.如何发现有问题得SQL,Mysql慢查询日志
第一步看看有没有开启慢查询得日志:‘
show VARIABLES like '%slow_query_log%' OFF表示没有开启
第二步,看看记录未使用索引的查询的设置开了吗?
SHOW VARIABLES LIKE '%log_queries_not_using_indexes%',没有开启
需要设置为ON,记录未使用索引的查询
SET GLOBAL log_queries_not_using_indexes=on;
第三步,看看超过多长时间的查询可以记录在数据库中
为了查看效果设置为0
第四步,一切设置妥当之后就可以开启慢查询日志了
第五步,测试,
我们在以上设置的数据库中查询数据,
慢查询日志所记录的位置:
日志显示,执行查询的用户未user,在本地执行的查询,查询的时间未0.000132秒。
第六步,通过使用工具来分析慢查询日志
最慢的三条的分析
第二款分析工具:
分析:
结果:
从日志中需要挑出什么样的SQL进行优化:
通过explain分析问题SQL:
const:对于主键,唯一索引的查找
eq_reg:唯一索引,主键的范围查找
ref:常见于连接的查询
rang:索引的范围查找
index:索引的扫描
ALL:表扫描
实验一下EXPLAIN:
COUNT()和MAX()的优化:
可以看到这是一个全表扫描.这种情况怎么优化呢?可以在payment_date上建立一个索引:
并不需要表的操作
COUNT()查询的优化:
例子:分别查询2007和2006电影发行的数量
子查询的优化:子查询转换成连接查询后需要注意数据重复的问题
使用主键来排序,
主键必须有序连续且自增。
索引的优化:
1.如何建立合适的索引
如何判断字段的离散度:
索引优化SQL的方法:
第一个就是不能有重复的索引,主键和唯一索引就是重复的索引,例如下面的示例。
联合索引默认会包含主键,如果建里联合索引又把主键包含进去就是冗余索引,如下例子所示:
如何查看重复以及冗余索引:
索引的维护方法:
删除不再使用的索引: