SQL設計技巧優化

  1. TRANSACTION議題

    1. 將大型交易拆成數個小型交易

    2. 增刪修之間如果有包含大量查詢語法,一樣造成transaction等待
      ex.
      下列語法table1新增的資料會被lock直到 commit=5秒後
      Begintransaction
      insert into table1 (1,1,1,1) --// 1ms
      select* from tableX --// 5000ms
      update table1 set col1=2 where id =1 --//1ms
      Commit transacton

  2. VIEW議題

    1. 加工後的view可能會影響索引查詢

    2. 適合靜態資料

  3. TEMPTABLE 議題

    1. 無法以單一查詢取得結果集,需要經過複數的處理,才能得到結果,這時後才使用temptable

    2. temptable 的內容要量少質精

  4. WHERE議題

    1. 減少子查詢,以JOIN取代,目的是過濾資料

    2. true, false 結果取代所有資料集
      ex1.
      Select * from table1 where m_id in (select id from table2)
      Select * from table1 a where exists (select 1 from table2 where id= a.m_id)


      1. 避免負向查詢(NOT, != , <> , !>, !<, NOT EXISTS , NOT IN, NOT LIKE)

      2. 避免WHERE欄位進行加工運算ex. WHERE RTRIM(user_nm)= @user_nm

    1. 索引議題

      1. 一定要建立foreignkey index

      2. 儘量使用數字型態的欄位作為索引

      3. 索引如果是文字型態,儘量不超過20byte

      4. 索引數量不可超過6

      5. like '%DDD' 不會使用索引 ,'DDD%' 會使用索引

      6. 如果有用到OR,則所有欄位都要有索引才有作用(不如查詢兩次後UNION)

    2. NULL議題

      1. 比空字串占空間

      2. 存成NULL比存成空字串更耗時

    3. 其他

      1. 使用資料庫物件,儘量寫schema.object =>不寫schema一律先找dbo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值