如何避免大型SQL查询中的OR条件

时间:2015-04-22 09:07:54

标签: sql algorithm

我有一个要求,我们需要形成一个动态SQL查询,它将具有100 OR条件,如下所示.in子句中的参数数量可以从1到50。 所有参数都来自UI。

GK_QUEUE中的记录数量= 1,00,000并且将来会增加(每天200条记录)。 Process_type和Process_category中的记录数为60个静态行。 区号中没有4个值

是否有更好的方法来处理此问题,而不是使用or和in条件进行大型查询。

SELECT *  
FROM GK_queue UQ  
INNER JOIN PROCESS_TYPE WPT ON WPT.ID_PROCESS_TYPE = UQ.ID_PROCESS_TYPE             
INNER JOIN PROCESS_CATEGORY WPTC ON WPTC.ID_PROCESS_CATEGORY = WPT.ID_PROCESS_CATEGORY 
AND UQ.REGION_CODE IN (:regions)

OR (UQ.CURRENT_TYPE =  'G-D-CHL-TSD-PND-APPRV'  and UQ.xu in ('GH','IN'))
OR (UQ.CURRENT_TYPE =  'G-D-CHL-TSD-PND-NTFY-AMR'  and UQ.xu in (' SH7',' SHB',' SHE',' SSZ',' SZN',' TBI',' TH1',' TW1',' VNB',' VSE'))
OR (UQ.CURRENT_TYPE =  'G-D-CHL-TSD-SEND-NOTICE'  and UQ.xu in ('051',' 273',' 494',' 601',' 604',' 616',' 645',' 650',' 671'))
OR (UQ.CURRENT_TYPE =  'G-D-PRNT-G-REW-NOTFY'  and UQ.xu in (' 770',' 877',' 931',' 937',' APC',' AUS',' BJ1',' BJB',' CNY',' HK1',' ID2'))
OR (UQ.CURRENT_TYPE =  'G-D-PRNT-TSD-D-COMPLETE'  and UQ.xu in (' BJ1',' BJB',' CNY',' HK1',' ID2',' IN9',' ISE',' JPN',' KR1',' ML7',' MY1'))
OR (UQ.CURRENT_TYPE =  'G-D-PRNT-TSD-IP'  and UQ.xu in (' PH2',' PR8',' SCD',' SDL',' SG1',' SGZ',' SH7',' SHB',' SHE',' SSZ',' SZN',' TBI'))

0 个答案:

没有答案