1,優化器模式:rule,all rows,fist row
2,新增索引可能造成許多其他sql語句執行計畫的改變
3,可以為sql儲存可以立即執行的執行計畫(調整持久化)
4,sql調整目標:a 去掉不必要的大型表的全表掃瞄 b快取小型表的全表掃瞄 c 檢驗優化索引的使用 d 檢驗優化的連線技術
5,一些sql 監控語句:access.sql plan.sql access-report..sql get_sql
6,大型表 塊數遠遠大於200
7,對小表進行快取
8,sql中的四個步驟:解析,**,執行和獲取
9,oracle 有兩個優化目標:最大速度(針對 oltp, 使用 first_rows )、最小的資源占用(針對批處理,使用 all_rows )
表的訪問方式:全表掃瞄、雜湊訪問、 rowid 訪問
rowid 中包含了一條記錄的資料塊號和它在資料塊中的偏移量。
索引的訪問方式:索引範圍掃瞄、單個索引掃瞄、降序索引範圍掃瞄、 and-euqal 過濾器
連線操作:巢狀迴圈連線,雜湊連線,排序合併連線, star 查詢連線, connect by 連線
排序合併連線和雜湊連線:更大的吞吐量、排序、快(針對大記錄子集)、不需要索引
巢狀迴圈連線:更短的反映時間、不排序、慢(針對大記錄子集)、需要索引
產生記錄排序的 sql:order by ,join,group by,aggregate,select unique,select distinct,create index;
基於成本的優化器:需要了解的資料報括表資料、記錄的數目、物理資料塊的數目、索引資料、索引中唯一值的數目、索引中值的分布、索引的可選性、索引簇因素
磁碟排序之所以昂貴是由於下面幾個原因:1,他們同在記憶體中進行排序比較起來太慢;2 磁碟排序將消耗零時表空間的資源。
sql執行的級別:sql源**
執行計畫(合併排序,完全表訪問,雜湊連線,巢狀迴圈連線)
表訪問方式(全表訪問(合併+完全),rowid(雜湊連線,巢狀迴圈連線))
使用ctas(create table as select),通過將記錄的物理位置根據主鍵索引的順序排序,這個方法將建築地提高資料讀取速度。這中方法只有在程式選擇多條記錄,使用索引範圍掃瞄或者應用程式多次查詢連續的主鍵時有用。
將全表掃瞄替換為索引範圍掃瞄總體方針如下:
對於所有記錄排序的表 40%
對於未經排序的表 7%
oracle並行查詢只適用於執行全表掃瞄的查詢。
在記憶體中為所有會話使用的排序空間必須相同
如果表相對穩定,使用儲存框架將會很大程度上提高sql的效能,因為這樣做將繞過sql的解析過程。
只要可能的話,在oracle的sql中無論何時都應該避免使用子查詢,在某些情況下可以使用乙個標準的連線操作來代替。
SQL 提高效能
參考部落格 非常感謝博主分享。1.set nocount on 關閉行基數資訊,減少網路通訊,提高程式效能。2.count 1 count 2 count name count 前三種效果一樣,count 找出最短的列,所以建議用count 1 效率高。3.with nolock 大量的查詢,會導致...
編寫高效能SQL
前言 系統優化中乙個很重要的方面就是sql語句的優化。對於海量資料,劣質sql語句和優質sql語句之間的速度差別可達到上百倍,可見對於乙個系統不是簡單的能實現其功能就可以了,而是要寫出高質量的sql語句,提高系統的可用性。在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的編...
Oracle中的SQL語句效能調整原則
一 問題的提出 在應用系統開發初期,由於開發資料庫資料比較少,對於查詢sql語句,複雜檢視的的編寫等體會不出sql語句各種寫法的效能優劣,但是如果將應用系統提交實際應用後,隨著資料庫中資料的增加,系統的響應速度就成為目前系統需要解決的最主要的問題之一。系統優化中乙個很重要的方面就是sql語句的優化。...