最佳化哪些內容
資料庫輸送量
單位時間記憶體取的資料量
資料庫使用者回應時間
系統服務時間
提高資料庫的輸送量
使用者等待時間
減少使用者訪問同一資料庫資源的衝突率
效能最佳化過程
1. 調整資料結構的設計
哪些表經常訪問:建立索引
哪些表經常聯結:建立冗餘欄位
2. 調整應用程式結構設計
CS/BS:人少與人多的問題
OLTP/OLAP:資料更新多/查詢多的問題
3. 調整資料庫SQL語句
SQL語句是應用系統最關鍵的效能
4. 調整伺服器記憶體配置
儲存更多共用資源
5. 調整硬碟I/O
6. 調整作業系統參數
SGA(全域共用記憶體) 共用池
共用池是PL/SQL程式進行文法分析、編譯、執行的記憶體地區,共用池的大小直接影響資料庫的效能。儲存了對SQL分析結果,減少了分析相同SQL的時間,提高SQL執行效率。
SELECT子句中避免使用 ‘ * ‘
、*‘是一個方便的方法但也是一個非常低效的 方法. 實際上,ORACLE在解析的過程中, 會將’*’ 依次轉換成所有 的列名, 這個工作是通過查詢資料字典完成的, 這意味著將耗費更多的時間.不必每次取出所有的資料規則:
not exists,not in,表串連。
規則:not exists代替not in
規則:用表串連替換EXISTS
1、查詢一個表有,而另一個表沒有的記錄,用not exists最快。
2、查詢多個表都有的記錄,用表的對待聯結最快
--查詢沒有人的部門
--分析 員工表中沒有此部門編號
select * from dept where dept.deptno not in
(select emp.deptno from emp); -- not in
最佳化方式
select * from dept where not exists -- not exists 效能比not in好
(select 'a' from emp where emp.deptno = dept.deptno)
表串連
select * from emp where emp.deptno in (select dept.deptno from dept)
select * from emp where exists (select 'd' from dept where dept.deptno = emp.deptno);
最佳化方式
select * from emp join dept on emp.deptno = dept.deptno;
索引使用注意事項
索引的本質就是通過建立一個內部的索引表來達到快速搜尋的目的。
索引可以提高在該表上執行SELECT語句的速度,但是會降低資料增刪改語句執行的速度。
應該使用索引的地方
被索引的列經常在where條件中被查詢
查詢時返回資料比較少(少於1/3)
不應該使用索引的地方
小表不需要建索引
表的索引列經常修改時
返回的資料很多時
儘快使用COMMIT,但是要注意事務完整性。
財務1部為張三加500塊,財務2部為張三減500塊。
張三給李四轉帳500塊。
對經常修改的欄位使用char類型
如果一個VARCHAR列經常被修改,而且每次被修改的資料的長度不同,這會引起‘行遷移’(Row Migration)現象,而這造成多餘的I/O,是資料庫設計和調整中要儘力避免的,在這種情況下用CHAR代替VARCHAR會更好一些。
因為CHAR的效率比VARCHAR的效率稍高。在資料庫查詢資料時,對於變長類型欄位,必須要先擷取資料的長度,而定長類型欄位而沒有這一步,所以查詢效率要高於變長類型欄位。
在實際開發中建議使用char(1)來代替BIT類型,以提高系統的相容性。