有没有办法有效地重写 SQL 查询?
Is there a way to rewrite the SQL query efficiently?
我知道,这可能是一个非常基本和简单的 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');
查询给了我我正在寻找的结果,但我怀疑它是否非常高效。
如您所见,我在相同的 table.
上针对相同的属性过滤了两次
有没有办法提高这个查询的性能?
也许是自我加入?
我认为没有必要使用子查询
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
我知道,这可能是一个非常基本和简单的 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');
查询给了我我正在寻找的结果,但我怀疑它是否非常高效。 如您所见,我在相同的 table.
上针对相同的属性过滤了两次有没有办法提高这个查询的性能? 也许是自我加入?
我认为没有必要使用子查询
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