DB2查询优化;喜欢另类

时间:2014-08-18 13:41:59

标签: sql indexing db2 sql-like

我希望进行通配符搜索,但我注意到某些特定字符串的某些性能下降(那些最初会返回大量数据的字符串)。

SELECT       tbl_1.KEY
           , tbl_1.USERID
           , tbl_1.DOMAIN 
           , tbl_2.*
           , tbl_3.*
           , tbl_4.*


FROM       , tbl_1 
           , tbl_2                 
           , tbl_3                    
           , tbl_4   

WHERE        tbl_1.KEY                   =      tbl_2.KEY
AND          tbl_1.KEY                   =      tbl_3.KEY
AND          tbl_1.KEY                   =      tbl_4.KEY 
AND          UPPER(tbl_1.USERID)         LIKE   'STRING%' 
AND          UPPER(tbl_1.DOMAIN)         LIKE   'STRING%' 
AND          tbl_3.CRIT1                 =      ''  
AND          tbl_3.CRIT2                 IN     ('')
AND          tbl_4.CRIT3                 =      '' 

基本上我会根据电子邮件地址和域通配符返回个人配置文件,然后进行过滤。 tbl_1上有一个由KEY,USERID和DOMAIN组成的索引。我试图避免表扫描并仅使用Index&#d; d字段。 DB2 LIKE似乎不支持Index。

1 个答案:

答案 0 :(得分:1)

UPPER()可能是问题......不确定DB2 LUW,但至少在DB2 for IBM中它是这样的。进行不区分大小写搜索的“正确”方法是使用不区分大小写的整理顺序或派生索引。

派生索引:

CREATE INDEX myindex ON MYTABLE (UPPER(USERID))

在DB2 for IBM i上,您可以通过设置

来使用不区分大小写的整理顺序
SET OPTION SRTSEQ = *LANGIDSHR 

注意,您必须在发出CREATE INDEX myindex ON MYTABLE (USERID)时以及在执行SELECT时设置* LANGIDSHR。