您好,登錄后才能下訂單哦!
Oracle學習篇之SQL語句的優化
①在使用SELECT語句查詢時,不要用“*”代替所有列名,因為這樣的寫法對Oracle系統來說會存在解析的動態問題。Oracle系統會通過查詢數據字典來將“*”轉換成表的所有列名,這自然會消耗系統時間。
②在子查詢中,[NOT] IN子句將執行一個內部的排序與合并,無論在那種情況下,[NOT] IN都是最低效的,因為他對子查詢中的表執行了一個全表遍歷。為了提高效率,我們可以把它改寫成外連接、NOT EXISTS 或者 EXISTS 子句。
③驅動表是指被最先訪問的表(通常以全表掃描的方式被訪問)。而一般緊隨FROM其后的表為驅動表,所以我們在表連接時要將有可用索引的表放在FROM后面,這樣可以提高查詢效率。
④創建主鍵和唯一索引的主要目的除了數據的完整性和一致性之外,還具有提高查詢速度的作用。
⑤對于只從總行數中查詢2%~4%的表,可以考慮創建索引。下面是創建索引的基本原則:
(1)以查詢關鍵字為基礎,表中的行隨機排序。
(2)包含的列數相對比較少的表。
(3)表中的大多數查詢都包含相對簡單的WHRER從句。
(4)對于經常以查詢關鍵字為基礎的表,并且該表中的行遵從均勻分布。
(5)緩存命中率低,并且不需要操作系統權限。
⑥避免全表掃描大表,以下情況下Oracle就會使用全表掃描:
(1)所查詢的表沒有索引。
(2)需要返回所有的行。
(3)帶like并使用“%”這樣的語句就是全表掃描。
(4)對索引主列有條件限制,但使用了函數,則Oracle使用全表掃描。
(5)帶有is null、is non null 或!=等字句也導致全表掃描。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。