有没有办法有效地重写SQL查询?

时间:2018-01-24 08:22:50

标签: sql teradata

我知道,这可能是一个非常基本和简单的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');

查询给了我结果,我正在寻找,但我怀疑,它是非常高效的。 正如您所看到的,我在同一张桌子上为同一属性进行了两次过滤。

有没有办法提高此查询的性能? 也许是自我加入?

1 个答案:

答案 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