1. 程式人生 > >sqlserver 關聯查詢 charindex 函數 查詢慢,不使用索引問題解決辦法

sqlserver 關聯查詢 charindex 函數 查詢慢,不使用索引問題解決辦法

單個 索引 觸發 其中 關鍵字 函數 pla select replace

問題:

  兩張表 數據都非常多

A表中A1字段 需要關聯B表主鍵 查詢

A1 字段 存儲多個B表主鍵

  格式為:

    格式1:b1,b2,b3

    格式2:b4

    格式3:b5,b6

逗號分隔的占少數

這樣就導致在做關聯查詢時,必須使用 like ‘%...%‘, charindex ,又或者replace(A1,b1,‘‘) <> A1 等手段,而在SqlServer中使用這些方法來查詢,會觸發全表檢索,導致字段對應的索引失效,效率極低;

解決方案:

  前提:在逗號分隔的數據 與 直接關聯的數據量有差異的情況下,如 總共100條數據,其中99 條都是A1 直接存儲B表主鍵,有一條存儲了多個B表主鍵,並用逗號分隔

  那麽可以 采用分開查詢,單個存儲於多個存儲值 的記錄分開查詢結果用 union 關鍵字做合並 如:

  

select AA.* from A AA
  where exists(
    select A.pk from A,B where A.A1 like ‘%,%‘ and charindex(B.pk,A.A1) > 0 and AA.pk = A.pk
    union all
    select A.pk from A,B where A.A1 =B.pk and AA.pk = A.pk
  )

其實就是根據數據量大小 將 需要使用全表檢索的數據分開,而不影響其他不需要全表檢索的數據查詢速度,從而解決查詢卡頓的問題

  

  

  

sqlserver 關聯查詢 charindex 函數 查詢慢,不使用索引問題解決辦法