建議不使用(*)來代替全部列名sql
用truncate代替delete數據庫
在SQL*Plus環境中直接使用truncate table便可;要在PL/SQL中使用,如:緩存
建立一個存儲過程,實現使用truncate命令動態刪除數據表函數
create or replace procedure trun_table(table_deleted in varchar2) as
cur_name integer;
begin
cur_name:=dbms_sql.open_cursor;
dbms_sql.parse(cur_name,'truncate table'||table_deleted||'drop storage',
dbms_sql.native);
dbms_sql.close_cursor(cur_name);
exception
when others then dbms_sql.close_cursor(cur_name);
raise;
end trun_table;
/性能
在確保完整性的狀況下多用commit語句測試
commit所釋放的資源以下:大數據
回滾段上用於恢復數據的信息,撤銷表空間也只做短暫的保留優化
被程序語句得到的鎖操作系統
redo log buffer中的空間設計
Oracle爲管理上述資源的內部花費
儘可能減小表的查詢次數
在含有子查詢的SQL語句中,要特別注意減小對錶的查詢
用[not]exists 代替[not]in
錶鏈接優化
驅動表的選擇
驅動表是指最早被訪問的表(一般以全表掃描的方式被訪問);一般只有from 表後都創建索引,優化器才能按照(每一個表的物理大小、索引狀態,選擇花費最低的執行路徑)驅動表的規則來對待
where子句的鏈接順序
Oracle採用自下而上的順序解析where子句,根據這個原理,表之間的鏈接必須寫在其餘where條件以前。那些能夠過濾掉最大數據記錄的條件必須寫在where子句的末尾,也就是在錶鏈接以前過濾掉的記錄越多越好
合理使用索引
什麼時候使用索引
對於只從總行數中查詢2%-4%的表,能夠考慮建立索引,建立索引的基本原則
1.以查詢關鍵字爲基礎,表中的行隨機排序
2.包含的列數相對比較少的表
3.表中的大多數查詢都包含相對簡單的where從句
4.對於常常以查詢關鍵字爲基礎的表,而且該表中的行聽從均勻分佈
5.緩存命中率低,而且不須要操做系統權限
選擇複合索引主列
若是在創建索引時採用了幾個列做爲索引,則在使用時也要按照創建時的順序來描述,也就是說,主列是最早被選擇的列
避免全表掃描大表
會致使全表掃描的狀況:
1.所查詢的表沒有索引
2.須要返回全部的行
3.帶有like並使用%這樣的語句
4.對索引主列由條件限制,但使用了函數,則Oracle使用全表掃描
5.is null is not null !=等子句
監視索引是否被引用
從Oracle9i開始,用戶能夠對索引進行監視,看看所建立的索引是否被使用
如:監視學生成績表studentgrade的grade_index索引是否被使用
alter index grade_index monitoring usage;
select * from v$object_usage;
優化器的使用
優化器的概念
實際上,Oracle優化器在處理每個SQL語句準備執行以前,都須要進行許多步驟才能使SQL語句成爲可執行的語句,主要步驟以下:
1.語法檢查:檢查SQL語句的拼寫是否正確
2.語義分析: 覈實全部與數據字典不一致的表和列的名字
3.概要存儲檢查: 檢查數據字典,以肯定該SQL語句的概要是否存在
4.生成執行計劃:使用基於成本的優化規則和數據字典的統計表來決定最佳執行計劃
5.創建二進制代碼:基於執行計劃,Oracle生成了二進制執行代碼
Oracle11g中SQL執行計劃的管理
Oracle11g使用基於成本的優化方式(Cost_Based Optimization,CBD),這裏的代價主要指CPU和內存,優化器主要參照的時表及索引的統計信息。統計信息給出表的大小、有多少行、每行的長度等信息。這些統計信息起初在數據庫內是沒有的,時用戶作analyze後纔出現的。不少時候,過時統計信息會令優化器作出一個錯誤的執行計劃,所以用戶應及時更新這些消息。
數據庫和SQL重演
對於數據庫和SQL語句優化,Oracle11g中提出了兩個新特性——數據庫重演(Database Replay)和SQL重演(SQL Replay)
數據庫重演
DatabaseReplay是指在產品環境的數據庫上捕獲全部負載,並能夠將之傳送至備份的(Standby)數據庫或有備份恢復的測試庫上,在測試環境中重演主庫的環境,這使得升級或軟件更新能夠進行預先的「真實」測試,或者能夠經過測試環境徹底再現真實環境的負載及運行狀況。
通常使用這一特性,會帶來約5%性能負擔
SQL重演
只捕獲SQL,經過SQL負載,應用程序能夠再現SQL影響
Flashback能夠向後閃回;Replay能夠向前推演。
Oracle性能顧問
Oracle數據庫中有一位自動數據庫診斷監控程序(ADDM)形式的助理DBA,這種機器人式的DBA會不知疲倦地反覆搜索數據庫性能統計,以標識瓶頸、分析SQL語句,並據此提供多種改進性能的建議。Oracle自動SQL調整解決方案包括SQL調優顧問(SQL Tunning Advisor)和SQL訪問顧問(SQL Access Advisor),能夠爲應用程序提供綜合、自動、具備成本效益的解決方案,減小SQL的調整時間和管理成本
SQL調優顧問
Oracle10g引入的,爲了替代傳統的手動SQL調整
處理對象包括那些響應時間很慢或者佔用CPU/DISK很高的SQL
SQL調優顧問收集這些SQL,而且給出本身的建議,它包括下面的部分:
1.這樣調整SQL的執行計劃
2.優化後效率的提高幅度
3.作出這條建議的理論原理
4.直接給出推薦使用的命令
用戶能夠選擇性地接受這些建議,而後去調優SQL;隨着SQL調優顧問的引入,用戶如今可讓Oracle優化器來自動調整SQL
SQL訪問顧問
設計目的是得到有關基於實際頻率和使用類型(而非數據類型)進行分區、索引和建立物化視圖以改進模式設計的建議。它的特色:
1.分析整個負載而不只僅是單獨的SQL語句。
2.使訪問結構設計更加清晰,以優化應用程序性能。
3.建議建立和刪除某些索引、物化視圖和物化視圖日誌以提升性能