sqlserver 關聯查詢 charindex 函數 查詢慢,不使用索引問題解決辦法
阿新 • • 發佈:2017-05-09
單個 索引 觸發 其中 關鍵字 函數 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 函數 查詢慢,不使用索引問題解決辦法