【发布时间】:2015-09-09 23:00:30
【问题描述】:
Oracle 中有一个包含大量行的数据库表。当查询一行时,使用两个非索引列。查询可能需要大约 30 秒才能返回。
用户发送数据对列表,因此查询将使用第一对数据,将其插入查询并执行。要遍历所有数据,完成的时间相当长。
示例:如果有 20 个数据对,则完成时间将为 20 个数据对*30 秒 = 600 秒。
谁能推荐一种可以减少完成查询时间的方法?如果可能,请发布一个示例 SQL。
谢谢
【问题讨论】:
-
在这些列上添加索引以避免重复的全表扫描。没有别的事可做。
-
谢谢。但是我们不拥有这些表,也不允许修改它。
-
在不查看查询(和表/索引定义)的情况下调整查询有点类似于通过电话进行手术,所以如果 @Wolf 做的切口不顺利,您可能还想尝试一次“插入”(无论这意味着什么)“数据对列表”,而不是一个一个地“插入”它们。
-
@mustaccio 我知道并且我同意。想象一个简单的查询,它说 where firstname=?和姓氏=?这可能需要 30 秒才能返回
-
我什至可以想象这样的查询永远不会返回,但恐怕这可能无法帮助您解决问题。