对查询进行优化,要尽可能避免全表扫描,首先应考虑where及order by涉及的列上创建索引 java
应尽可能避免在where子句中对字段进行null值判断, 不然索引失效而进行全表扫描, 例如: sql
select id from table where num is null
最好不要给数据库留null, 尽量的使用not null填充数据库 数据库
3.应尽可能避免在where子句中使用!= 或者<>操做符, 不然索引失效致使进行全表扫描 性能优化
4. 应尽可能避免在 where 子句中使用 or 来链接条件,若是一个字段有索引,一个字段没有索引,将致使引擎放弃使用索引而进行全表扫描, 如: oracle
select id from table where num=10 or name='admin'
能够这样查询: oop
select id from table where num=10 union all select id from table where name='admin'
5. in 和 not in 也要慎用, 不然会致使全表扫描 如: 性能
select id from table where num in(1,2,3)
对于连续的数值,能用between 就不要用in了 大数据
select id from table where num between 1 and 3
6.应尽可能避免使用like, 这样会致使全表进行扫描: 优化
select id from table where name like '%abc%'
前面咱们提到了sql优化的常见方法, 那么究竟何时咱们须要对sql进行优化呢, 经过何种方式来对sql进行优化呢, 下面主要介绍一下执行计划, 执行计划是SQL优化的先决条件,经过执行计划能够更好的找到对SQL性能问题的定位 spa
咱们能够经过执行命令
EXPLAIN PLAN FOR SELECT * FROM TABLE;
看下执行后的结果:
解释一下几个参数:
下面主要介绍一下这三种链接的使用场景: