https://segmentfault.com/a/1190000006158186
https://tech.meituan.com/mysql-index.html
http://www.cnblogs.com/wajika/p/6713636.html
使用索引,减少列,减少连接操作,精简数据类型和约束条件。
去除重复索引
重复索引使数据库需要做更多工作保持数据和索引一致性,且消耗磁盘空间,导致备份和恢复所需时间增加。
去除没有被使用的索引或者无效索引
改进索引
减少SQL语句
把多条ALERT语句整合成一条SQL语句是一种简单的优化
简化SQL语句
使用连接代替子查询
缓存选项
MySQL查询缓存可能会让写操作多与读操作的业务产生退化,对给定的表的任何改变,都会导致与该表相关的缓存失效。
在应用程序缓存
优化完之后需要验证,优化效果是否会随着数据容量增加而退化。
show status like 'innodb_buffer%'; show status like 'Qcache%'; select * from information_schema.processlist; show engine INNODB status; show variables like 'query_cache%'; set profiling = 1; select * from student where id = 1; show profiles; show profile for query 1;
OR
改写成IN
:OR
的效率是n级别,IN
的效率是log(n)级别,in的个数建议控制在200以内
对于连续数值,使用BETWEEN
不用IN
:SELECT id FROM t WHERE num BETWEEN 1 AND 5
列表数据不要拿全表,要使用LIMIT
来分页,每页数量也不要太大