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

问题描述 投票:0回答:1

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

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

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

sql teradata
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.