Oracle學習篇之SQL語句的最佳化

來源:互聯網
上載者:User

標籤:oracle   基礎知識   

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 或!=等字句也導致全表掃描。





本文出自 “11544066” 部落格,請務必保留此出處http://11554066.blog.51cto.com/11544066/1900237

Oracle學習篇之SQL語句的最佳化

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.