以前刚开始做项目的时候,开发经验尚浅,每次遇到查询比较慢时,项目经理就会问:是不是又用select * 了?查询条件有没有加索引?一语惊醒梦中人,赶紧检查..果然如此!
有时我们写sql语句时,没有考虑它的性能或者完全没有优化意识,虽然能暂时满足基本功能,等到数据量大时,后果可想而知。
下面我们就聊一聊sql优化的一些常见方法:
1. 尽量不要用select * from table,除非需要返回数据库表的全部字段,否则不要返回用不到的任何字段。因为select * 会导致全表扫描,效率比较低。
2. where子句及order by涉及的列尽量建索引,不一定要全部建索引,依业务情形而定。对于多条where子句都用到的列,建议建索引。索引并不是越多越好,索引固然可以提高相应的select的效率,但同时也降低了insert及update 的效率。
3. 尽量避免在 where 子句中使用 != 或 <> 操作符,否则引擎将会放弃使用索引而进行全表扫描。 对于不等于这种情况,可考虑改为范围查询解决。
4. 尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,引擎将放弃使用索引而进行全表扫描,如:select id from person_info where age=10 or name= '张三'
可以这样查询:
select id from person_info where age = 10 union all select id from person_info where name= '张三'