【发布时间】:2013-12-05 22:24:12
【问题描述】:
我有两个表:tableA 和 tableB TableA 有数百万条记录,tableB 有大约 1000 条记录
Table A {
aid
city, (city is indexed)
state,
X,
Y
}
Table B {
bid,
city,
state
}
现在我的查询是
SELECT X, Y, COUNT(*) FROM A,B
WHERE A.city = B.city
and A.state=B.state
group by X,Y
此查询运行速度非常慢。然而,当我们只加入城市时,一切都运行得非常快。 现在我的查询是
SELECT X, Y, COUNT(*) FROM A,B
WHERE A.city = B.city
group by X,Y
所以我去了解释计划,在第一种情况下(慢)查询计划没有使用索引,而在第二种情况下它使用了城市索引。我尝试在 A 表中添加状态索引,但没有按预期提供帮助。我还尝试在选择后使用 /*+ INDEX(A,city_idx) */ 之类的索引提示,但这并没有太大帮助。在这种情况下你能帮帮我吗?
【问题讨论】:
-
你应该尝试添加一个
use_nl(b a) -
你能告诉我们计划吗?
-
在 A(city, state) 上添加复合索引是一种解决方案,但问题是好的。如果条件
A.city=B.city导致嵌套循环使用索引,A.city = B.city and A.state=B.state也会发生同样的情况 -
谢谢,确实解决了问题。
标签: oracle join indexing query-optimization hint