oracle 的幾種sql優化2

2021-08-13 09:36:41 字數 1376 閱讀 6826

對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引

前提:表資料很多

索引失效情況:

1:避免在索引列上使用計算。where子句中,如果索引列是函式的一部分。優化器將不使用索引而使用全表掃瞄。

低效: select … from employee where sal * 12 > 25000;

高效: select … from employee where sal > 25000/12

2:避免在索引列上使用is null和is not null:

對於單列索引,如果列包含空值,索引中將不存在此記錄

低效: (索引失效)

select … from department where dept_code is not null;

高效:(索引有效)

select … from department where dept_code >=0

記住, 索引只能告訴你什麼存在於表中, 而不能告訴你什麼不存在於表中。

3:應盡量避免在 where 子句中使用!=或<>操作符

否則將引擎放棄使用索引而進行全表掃瞄。

mysql只有對以下操作符才使用索引:<,<=,=,>,>=,between,以及某些時候的like。

可以在like操作中使用索引的情形是指另乙個運算元不是以萬用字元(%或者_)開頭的情形。例如:

select id from  t where col like 'mich%'; #  這個查詢將使用索引,

select id from  t where col  like '%ike';   #這個查詢不會使用索引。

4:應盡量避免在 where 子句中使用 or 來連線條件否則將導致引擎放棄使用索引而進行全表掃瞄,如:

select id from t where num=10 or num=20

可以 使用union合併查詢: select id from t where num=10 union all select id from t where num=20

5:in 和 not in 也要慎用,否則會導致全表掃瞄,

如:select id from t where num in(1,2,3)對於連續的數值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3

索引並不是越多越好,

所以怎樣建索引需要慎重考慮,視具體情況而定。乙個表的索引數最好不要超過6個,若太多則應考慮一些不常使用到的列上建的索引是否有必要。

select子句中避免使用『*』:

在解析的過程中, 會將『*』依次轉換成所有的列名, 這個工作是通過查詢資料字典完成的, 這意味著將耗費更多的時間。

oracle 中sql優化的幾種方法

最基本最簡單的方式是減少訪問資料庫的次數。oracle在內部執行了許多任務作,比如解析sql語句,估算索引的利用率,讀資料塊等等,都將大量耗費oracle資料庫的執行。選擇最有效率的表名順序,也將明顯提公升oracle的效能。oracle解析器是按照從右到左的順序處理from子句中的表名。在執行se...

優化SQL的幾種方式

優化的目的 1 盡量保證索引能正確使用。2 盡量避免全域性搜尋。3 索引不是越多越好。方式 1 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引 2 應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全...

sql優化的幾種方式

一.為什麼要進行sql優化 我們開發專案上線初期,由於業務資料量相對較少,一些sql的執行效率對程式執行效率的影響不太明顯,而開發和運維人員也無法判斷sql對程式的執行效率有多大,故很少針對sql進行專門的優化,而隨著時間的積累,業務資料量的增多,sql的執行效率對程式的執行效率的影響逐漸增大,此時...