對查詢進行優化,要儘可能避免全表掃描,首先應考慮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;
看下執行後的結果:
解釋一下幾個參數:
下面主要介紹一下這三種鏈接的使用場景: