如下所示:
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 重視輸入輸出。在定義資料庫表和字段需求 輸入 時,首先應檢查現有的或者已經...