我知道,这可能是一个非常基本和简单的SQL问题,但我正在寻找一种方法来改进下面的SQL语句。
SELECT
ANY_COLUMN
FROM
MY_TABLE
WHERE
ATTR1='ABC'
AND
ATR2 = 'DEF'
AND
CAST(STRTOK((
SELECT
ANY_COLUMN
FROM
MY_TABLE
WHERE
ATTR1='ABC'
AND
ATR2 ='DEF'
), '.', 4) AS DATE FORMAT 'YYYYMMDD')
>
CAST(STRTOK('sometext.sometext.20100101.txt', '.', 4) AS DATE FORMAT 'YYYYMMDD');
查询给了我结果,我正在寻找,但我怀疑,它是非常高效的。 正如您所看到的,我在同一张桌子上为同一属性进行了两次过滤。
有没有办法提高此查询的性能? 也许是自我加入?
答案 0 :(得分:2)
我认为子查询不是必需的
SELECT
ANY_COLUMN
FROM
MY_TABLE
WHERE
ATTR1='ABC'
AND
ATR2 = 'DEF'
AND
TO_NUMBER(STRTOK(ANY_COLUMN, '.', 4)) >
TO_NUMBER(STRTOK('sometext.sometext.20100101.txt', '.', 4));
此外,为了有效地处理查询,需要(attr1, atr2)
上的索引:
create index ix_mytable_attr1_atr2(attr1, atr2) on MY_TABLE