前言
经常都会被问到或者与遇到数据库调优的问题,我的一般思路如下:
1)首先是数据量,需不需要分库分表;
2)第二是需不需要使用缓存技术,缓存一些热数据。
3)第三是sql优化,如果sql太复杂了,那我一般会用到explain分析sql的执行计划,优化sql;
4)第四选择索引
5)还有些读写分离、网络带宽的东西。
一、索引
对where和order by后面的条件列进行分析,看是否有建索引的必要,要建是建那种索引:普通索引、唯一索引、全文索引或者单行索引、复合索引。
二、sql的优化
1. 查询语句的优化,首先考虑在where和order by后的条件建立索引
2. 不要在where后的设置过索引的字段使用=和<>等符号,引擎会放弃索引进而全表扫描
3. 尽量避免在where子句中使用or,一个字段有索引,一个字段没有索引,引擎也会放弃索引进行全盘扫描。or可以用union all替代。
4. in和not in的使用也会造成全表扫描,in 和 not in也可以用exists 和not exists代替。如:
select num from a where num in(select num from b)替换为
select num from a where exists(select 1 from b where num=a.num)会提高效率
5. 注意like的