SQL设计技巧优化

  1. TRANSACTION議題

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

    2. 增刪修之間如果有包含大量查詢語法,一樣造成transaction等待
      ex.
      下列語法table1 新增的資料會被lock 直到 commit =5秒後
      Begin transaction
      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. TEMP TABLE 議題

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

    2. temp table 的內容要量少質精

  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. 一定要建立foreign key index

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

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

      4. 索引數量不可超過6

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

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

    2. NULL議題

      1. 比空字串占空間

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

    3. 其他

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

原文地址:https://www.cnblogs.com/jnhe/p/3163588.html