不多赘述,数据库的重中之重,可能不需要开发来做,但是一定要懂。
1、 索引优化:覆盖索引尽量不写*,全值匹配效率最高,最佳左前缀法则,like和%尽量写到右边,字符串类型一定要写引号,不等和null验证会导致索引失效,变成全表扫描,索引列上计算会导致索引(函数和加减乘除都会),范围之后的索引会失效
2、 慢查询日志:开启:找到配置文件my.ini中的slow_query_log设置为on,MySQL中用show variables like’%quer%’查看开启状态,慢查询默认10秒,可以在配置文件中更改,配置完后需要刷新数据库权限(flush privileges;)或者重启数据库才会生效,通过慢查询日志定位到慢SQL后用后面学到的方法进行优化
3、explain优化语句:
ID:表的读取顺序,ID相同由上往下执行,ID不同越大越先执行
Select type:读取类型
simple:简单查询不包含子查询或者union
primary:查询中若包含任何复杂的子部分,最外层查询则会被标记,就是最后加载的那个
subquery:在select或者where列表中包含了子查询
union:若第二个select出现在union之后则呗标记为union
union result:从union表中获取结果的select
table:显示跟那些表有关系
type:执行效率,由好到坏,system>const>rq_ref>ref>range>index>all
possible_keys:可能会用到的索引
key:实际用到的索引
key_len:使用到的索引的长度
ref:显示索引哪一列被使用到了
rows:扫描的行数
extra:额外信息,using filesort文件内排序,using tempory使用临时表,using index使用索引,using join buffer 使用缓存,using where用到where条件
4、 排序优化:分析SQL问题:测试环境下复现问题,找到问题后开启慢查询日志找到问题语句,用explain分析,用show profile进一步分析,查询profile是否开启show variables like ‘%pro%’,开启 set profiling = 1;
容易出现文件内排序,order by遵守最佳左前缀,排序升序、降序尽量一致,
有where条件跟order by组合也要遵守最佳左前缀
5、 Show profile:分析SQL语句具体的执行结构,开启后默认诊断之前15条代码,通过show profiles;命令来查看被记录到的命令,用show profile for query 代码的ID;来查看指定代码的详细执行情况
全局查询日志:用set global general_log = 1;命令开启,切记不要在生产环境开启,会影响数据库的性能,开启后会把所有SQL语句的执行情况记录在mysql.general_log表中,此方法比慢查询日志查到的信息更加全面
6、 主从配置:原理:从库会生成一个I/O线程和一个sql线程,I/O线程去请求主库binlog,并将得到的日志写到relay log(中继日志)中,主库会生成一个log dump线程用来给从库I/O线程传binlog,从库的sql线程会读取中继日志并解析成具体操作,从而实现主从数据一致
一般配置主从复制后,都是从库读,主库写,从而减轻主库的读压力