SQL語句優化 重點在於使用到索引

2021-06-10 09:34:46 字數 1544 閱讀 1526

一:減少資料庫中的null值

如果某列存在null值,即使對該列建立索引也不會提高效能。

二:注意not 運算子

select * from employee where salary<>1000;

select * from employee where salary<1000 or salary>1000;

第一句sql語句的執行效率不如第二句,因為第二句sql語句可以使用索引。

三:列的連線

select * from employee where name||department=』icedevelop』;

select * from employee where name=』ice』 and department=』develop』;

這兩個查詢,第二句比第一句會快,因為對於有連線運算子』||』的查詢,oracle優化器是不會使用索引的。

四:萬用字元『%』當萬用字元出現在搜尋詞首時,oracle優化器不使用索引

select * from employee where name like 『%z%』;

select * from employee where name like 『z%』;

第二句的執行效率會比第一句快,但查詢結果集可能會不同。

五:盡量避免混合型別的表示式

假設欄位salary為varchar2型別,有語句select * from student where salary>10000;

則oracle會有乙個隱含的型別轉換。隱含的型別轉換可能會使oracle優化器忽略索引。

這時應使用顯式的型別轉換select  *  from student where salary=to_char(10000)。

六:為不同的工作編寫不同的sql語句塊

為完成不同的工作編寫一大塊sql程式不是好方法。它往往導致每個任務的結果不優化。若要sql完成不同的工作,

一般應編寫不同的語句塊比編寫乙個要好。盡量不寫過於複雜的sql,簡單是效率的前提,穩定的前提。

七:  in 和exists的使用

select name from employee where name not in (select name from student);

select name from employee where not exists (select name from student);

第一句sql語句的執行效率不如第二句。使用exists,oracle會優先檢查主查詢,然後執行子查詢直到它找到第乙個匹配項。

執行in子查詢時,首先執行子查詢,並將獲得的結果列表存放在乙個加了索引的臨時表中。在執行子查詢之前,系統先將主查詢掛起,

待子查詢執行完畢,存放在臨時表中以後再執行主查詢。

八: order by 語句

order by 語句的執行效率很低,因為它要排序。應避免在order by 字句中使用表示式。

九:distinct

distinct總是建立乙個排序,所以查詢速度也慢。

SQL語句的優化(合理使用索引)

1.1 什麼時候使用索引?1 以查詢的關鍵字為基礎,表中行隨機排序 2 包含的列數 相對較少的表 3 表中大多數的查詢包含相對簡單的where從句 4 快取命中率低,而且也不用作業系統許可權 1.2 選擇什麼樣的索引列和表示式?1 where從句頻繁使用的關鍵字 2 重複性少的關鍵字 3 避免使用頻...

優化臨時表使用,SQL語句效能提公升100倍

sql語句如下 select distinct g.cp.name as cp name,c.name as category name,t.name as type name fromgm gameg left joingm cpcp on cp.id g.cp id and cp.deleted...

sql語句優化 盡量使用索引避免全表掃瞄 1

1.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is null 可以在nu...