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


問題:

  兩張表 數據都非常多

      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
  )

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

  

  

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM