【发布时间】:2013-05-28 18:06:02
【问题描述】:
我有一个大约有 1 亿行的表。必须使用 BETWEEN 运算符。我看到查询运行得很慢。
我在交易者表中添加了 2 个索引,第一个在 t.name 上,第二个索引是 t.amount 和 t.price。
查询执行速度非常慢。使用 BETWEEN 运算符时,对价格和金额进行索引是否有帮助。另外,我该如何优化呢?
select t.trader_id, t.name, t.city, t.state
from trader t where exists
(
SELECT null
FROM city_present p,city_state c
WHERE p.name = 'TEST_TEST'
AND c.city = p.city
AND c.state = p.state
AND t.city = c.city
AND t.state = c.state
AND t.price IS NOT NULL
AND t.price between (25.00000 , 58.000000)
AND t.amount IS NOT NULL
AND t.amount BETWEEN (-2500.0000 , 2800.000)
)
AND t.name = 'john test'
AND t.is_valid= 1
【问题讨论】:
-
您为什么要关注 BETWEEN?还有很多其他过滤器。
-
您能提供您的查询的执行计划吗?
-
t.price IS NOT NULL, t.amount IS NOT NULL 没有用,因为你有 t.price BETWEEN (25.00000 , 58.000000) 和 t.amount BETWEEN (-2500.0000 , 2800.000) 对应
-
不发布查询执行计划就问查询性能问题是没有意义的。
-
您好,我注意到您已经有将近 40 分钟没有活动并且还没有回答一个问题。请记住,Stack Overflow 的移动速度快速。如果您想获得最佳答案,请始终在提问后的前 30 分钟到一个小时内停留,并准备好立即在 cmets 中回答问题。
标签: performance oracle query-optimization