資料庫技巧

2021-09-05 23:48:56 字數 1976 閱讀 5256

如下所示:

select sum(t1.c1) from t1 where ((select count(*) from t2 where t2.c2=t1.c2)>0)

select sum(t1.c1) from t1 where exists(select * from t2 where t2.c2=t1.c2)

兩種產生相同的結果,但是後者的效率顯然要高過於前者。銀行後者不會產生大量鎖定的表掃瞄或是索引掃瞄。

經常需要些乙個t_sqll語句比較乙個父結果集和子結果集,從而找到是否存在在父結果集中有而在子結果集中乜嘢的記錄,如:

select _a.hdr_key from hdr_tb1 a               -----------tb1 a 表示tb1用別名a代替

where not exists (select * from dt1_tb1 b where a.hdr_key = b.hdr_key)

select _a.hdr_key from hdr_tb1 a               -----------tb1 a 表示tb1用別名a代替

left jion dt1_tb1 b on  a.hdr_key = b.hdr_key where b.hdr_key is null

select hdr_key  from hdr_tb1

where hdr_key not in (select hdr_key from dt1_tb1)

三種寫法都可以得到同樣的結果集,但是效率是依次降低

b)、where字句中盡量不要使用not運算子,如:not in ,not exists, not>、not《等等not運算子一般可以去除。如not salary >10000k可以改為:salary<=100,如避免使用not in,可以使用 left outer jion代替它。

c)、where 字句中條件表示式間邏輯關係為and時,將條件為假的概率高的放在前面,概率相同、條件計算簡單的放在前面。

d)、盡可能不要用order by字句。使用order by時,儘量減少列數、儘量減少排序資料行數、排序字段盡量是數字型(盡量不要是字元型)。group by、 select ditinct、union等字句,也經常導致order運算。

e)、不要使用select count(*)方式來判斷記錄是否存在,建議使用select top 1 from table1 where ……。

f)、不要使用group by而沒有聚合列。

g)、避免select 語句的where 字句條件用於假。如:where 1=0;

h)、如果有多表連線時,應該有主從表之分,並盡量從乙個表讀取數,如select a.col1,a.col2 from a jion b on a.col3=b.col4 where b.col5=』a』.

i)、在where 字句中,如果有多個過濾條件,應將所有列或過濾記錄數量最多的條件應該放在前面。

4. 使用truncate清空表

5. union和union all

union將兩個結果集合並後,會消除重覆記錄,而union all不會消除重覆記錄,而是直接將兩個結果集直接合併。明確得知兩個結果集中沒有重覆記錄或者重覆記錄不影響使用,建議使用union all 代替union。因為union在消除重覆記錄的過程中需要進行排序過濾操作,對大結果集這種排序操作會非常影響效能。

6. code、name字段長度

如果業務表中的code、name需要建立唯一索引,那code長度小於nvarchar(32),name長度小於nvarchar(200)比較合 適,不要超過255,避免超過索引鍵長度900bytes的限制   

資料庫操作技巧

一 排序 通常我們會有很多資料,字串欄位中有 1 2 9 10,我們讓他排序,但是得到的順序是1 10 7 8 9,這不是我們要的東西,我們希望他能按照10進製遞增順序排列 用個簡單的方法,這些個數如果最大值是2位的,我們就給他們統一加個3位數,如果是3位的,那就加上個4位數,以此類推。得到的數就是...

資料庫設計技巧

1.設計資料庫之前 需求分析階段 1 理解客戶需求,詢問使用者如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。2 了解企業業務可以在以後的開發階段節約大量的時間。3 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...

資料庫設計技巧

1.設計資料庫之前 需求分析階段 1 理解客戶需求,詢問使用者如何看待未來需求變化。讓客戶解釋其需求,而且隨著開發的繼續,還要經常詢問客戶保證其需求仍然在開發的目的之中。2 了解企業業務可以在以後的開發階段節約大量的時間。3 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...