我有一个类似于下面的查询,其中我在几个表中加入以获取所需的数据。我明确地加入了两个表(TableA
和TableB
,以便稍后我可以在TableB
上放置where条件
我想知道以下哪个选项使用的资源更少。但是,性能更好,因此速度更快?
方法1
SELECT
TB.Column1,
--Other Columns
FROM
TableA TA
INNER JOIN TableB TB ON (TA.Column1= TB.Column2)
-- Some other Joins
Where
TB.Column1 in ("Option1", "Option2"........,"Option12")
方法2
SELECT
DECODE(TA.Column1, 'AAAAAAAAAAAAA', 'Option1',
'BBBBBBBBBBBB', 'Option2',
.
.
.
'LLLLLLLLLLLLLL','Option12'),
--Other Columns
FROM
TableA TA
-- Some other Joins
WHERE TA.Column1 in ('AAAAAAAAAAAA',....,'LLLLLLLLLLLLLLLLLL')
我检查了Toad中的查询时间,结果令人困惑。对于较小的数据集,方法2似乎表现更好,但对于更大的数据集方法1更快。
答案 0 :(得分:0)
为了获得最佳性能,我建议如下:
如果TB.Column1只包含您感兴趣的值,则删除where子句,内部联接将为您过滤。
如果没有,则将布尔列添加到tb(例如MySelectFlag),将此项查询中的项目设置为1,然后您的联接成为
INNER JOIN TableB TB ON (TA.Column1= TB.Column2) AND TB.MySelectFlag = 1
这将非常快(特别是如果你向TB.MySelectFlag添加一个索引)