我处于困惑中,发现哪些会改善查询执行时间。 数据库和表信息: 我正在使用托管在远程位置的数据库可能是美国。 表约有2 cr。记录并且只有2列字符串格式。 我想使用过滤器和一些修改从该表中提取数据。 在select语句中。 DB_KEY具有唯一的密钥索引
选择陈述条件:
CASE WHEN (INSTR(DB_KEY , 'MsgOutMdlName' ) > 0) THEN
reverse(SUBSTR( reverse(DB_KEY) , INSTR (reverse(DB_KEY) , '|' , 1 ) ,LENGTH(DB_KEY) )) || 'MsgOutMdlName' ELSE
reverse(SUBSTR( reverse(DB_KEY) , INSTR (reverse(DB_KEY) , '|' , 1 ) ,LENGTH(DB_KEY) )) || 'MsgInAttName'
或者
CASE WHEN INSTR(DB_KEY , 'MsgOutMdlName' ) > 0 THEN
SUBSTR( DB_KEY , 0, INSTR(DB_KEY , '|' , 1, REGEXP_COUNT (DB_KEY, '[^|]+')-1 ) ) || 'MsgOutMdlName' ELSE
SUBSTR( DB_KEY , 0, INSTR(DB_KEY , '|' , 1, REGEXP_COUNT (DB_KEY, '[^|]+')-1 ) ) || 'MsgInAttName' end
或者
CASE WHEN DB_KEY like '%MsgOutMdlName'
然后上面的代码中的任何一个:
并在where子句中:
WHERE 1 = ( case when DB_VALUE is not null and
(DB_KEY LIKE 'TP|%MsgInAttName' or DB_KEY LIKE 'TP|%MsgOutMdlName') then 1 else null end )
或者在where子句中使用like运算符。
请建议我最好的方法。 DB_key具有动态数据值。
我已经使用了基于函数的索引,但没有获得更好的性能。