1、系統設計
1、縱向、橫向分割表,減少表的尺寸
縱向:欄位多。按業務主題分割。根據頁大小。
橫向:資料多。按條件分割表。
eg:按年儲存表,歷史資料表和當期資料更新表。
2、將資料處理交給db,編寫儲存過程
1)減少網路的開銷;
2)儲存過程是編譯、優化過,速度快。
3、唯讀查詢操作優化方法
1)資料量小的資料,放到程式快取中;
2)物化檢視,減除了為引用檢視的查詢動態建立結果集
的開銷
3)適當的資料冗餘,以減少資料庫表之間的鏈結操作,
提高查詢速度。
2、sql語句
1、 不使用游標。
declare cursor c_job is select * from emp for update;
c_row c_job%rowtype;
begin
for c_row in c_job loop
if c_row.sal<10000 then
newsal:=c_row.sal*2;
update emp set sal=newsal where current of c_job;
end if;
end loop;
end;
update emp set sal=case when sal<10000 then sal*2 else sal end;
避免使用not in
• select * from emp
where dept_id not in (select id from
dept)
select a.*
from emp a left outer join dept b on
a.dept_id=b.id
where b.id is null
• 避免使用in
• select * from emp
where dept_id in (select id from dept
where dept_name like 『研發%』);
select * from emp a where exists
(select 1 from dept b where a.dept_id=b.id and
b.dept_name like 『研發%』);
select a.*
from emp a, dept b
where a.dept_id=b.id and b.dept_name like 『研發%』;
使用group by不使用distinct
• select distinct dept_id from emp;
• select dept_id from emp group by
dept_id;
不要在一句話裡再三地使用相同的函式,
浪費資源,將結果放在變數裡再呼叫更快。
• 用or的字句可以分解成多個查詢,並且通
過union鏈結多個查詢。它們的速度只與
是否使用索引有關,如果查詢需要用到聯
合索引,用union all執行的效率更高。
記憶體臨時表的使用
• select * into #temp_emp from emp
where dept_id=『0101』;
• create global temporary table
temp_emp(……);
• declare global temporary table t_emp
like emp not logged with replace on
commit preserve rows;
3、部署
引數優化:記憶體、cpu
• 儲存優化:將資料、日誌、索引檔案使用
不同的io裝置。
資料庫效能優化
資料庫設計 實現sql server資料庫的優化,首先要有乙個好的資料庫設計方案。在實際工作中,許多sql server方案往往是由於資料庫設計得不好導致效能很差。實現良好的資料庫設計必須考慮這些問題 1.邏輯資料庫規範化問題 一般來說,邏輯資料庫設計會滿足規範化的前3級標準 第1規範 沒有重複的組...
資料庫效能優化
最近要寫一些關於企業級應用的優化內容的東西,就先從資料庫優化入手吧,在這裡先記錄一下。作為一名有資料庫教育背景的工作人員,我著重從db的角度介紹一下,我認為的db優化方式。首先,撇開經濟商業用處不談,db效能優化的原則主要是,通過盡可能少的磁碟訪問獲得所需的資料。一般而言,資料的是優化可以從三方面分...
資料庫效能優化
1.在join表的時候使用相當型別的例,並將其索引 2.千萬不要 order by rand 3.使用 enum 而不是 varchar 4.永遠為每張表設定乙個id 5.從 procedure analyse 取得建議 6.盡可能的使用 not null 7.固定長度的表會更快 myisam 適合...