我希望进行通配符搜索,但我注意到某些特定字符串的某些性能下降(那些最初会返回大量数据的字符串)。
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。
答案 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。