我正在使用Oracle。如果我不加入只有36条记录的表,我的查询运行得很快。如果我加入则需要将近2秒钟。现在我想改进查询。这是查询的一瞥,
SELECT BT.Col1, Count('t')
FROM BigTable BT
INNER JOIN SmallTable ST ON ST.SomeCol = BT.SomeCol
GROUP BY BT.Col1
我也用EXISTS进行了测试,但时间保持不变。
BigTable有2,151,300条记录和36条小记录。
答案 0 :(得分:1)
在BigTable上创建此索引:
CREATE INDEX big_covering_ix ON BigTable( SomeCol, Col1 );
我不确定常量t
的目的是什么:
SELECT ..... Count('t')
它会更简单:Count(*)
。
无论如何,它不会影响查询的速度。
答案 1 :(得分:1)
我建议将其写为exists
,然后添加索引。查询是:
SELECT BT.Col1, Count(*)
FROM BigTable BT
WHERE EXISTS (SELECT 1 FROM SmallTable ST WHERE ST.SomeCol = BT.SomeCol)
GROUP BY BT.Col1;
这假定SmallTable
没有重复。
对于此查询,请尝试BigTable(col1, somecol)
上的索引。