下面的“大”查询运行24小时以上:
SELECT *
FROM VIEW
WHERE COL_A IN (a, b, c, ...)
AND COL_B IN (d, e, f, ...)
相反,将这个“大”查询分为多个“小”查询并同时执行它们将在30分钟内完成:
SELECT *
FROM VIEW
WHERE COL_A IN (a) AND COL_B IN (d)
SELECT *
FROM VIEW
WHERE COL_A IN (a) AND COL_B IN (e)
...
SELECT *
FROM VIEW
WHERE COL_A IN (b) AND COL_B IN (d)
SELECT *
FROM VIEW
WHERE COL_A IN (b) AND COL_B IN (e)
...
如果相关,那么“大”查询中的每个IN语句都包含约30个项目。因此,有900个唯一的“小”查询= 1个“大”查询。
请注意,VIEW
定义为对VIEW_1
的查询,而查询本身就是对VIEW_2
的查询,而VIEW_3
本身就是对EXPLAIN PLAN
的查询。每个VIEW都有几百万行。
我将对视图进行反向工程,并针对我想要的内容编写自己的单个查询。但是,我没有对基础表的SELECT访问权限。
当返回的表相同时,以编程方式并行编写和执行900个不同的查询(使用的Python)似乎比一个大查询的执行速度快。为什么会这样?
已附上@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface ClassifierOne {
}
@Qualifier
@Retention(RUNTIME)
@Target({FIELD, TYPE, METHOD})
public @interface ClassifierTwo {
}
中的200个操作的摘要。
答案 0 :(得分:1)
首先,您可以将它们作为一个查询运行:
SELECT * FROM VIEW WHERE COL_A IN (a) AND COL_B IN (d)
UNION ALL
SELECT * FROM VIEW WHERE COL_A IN (a) AND COL_B IN (e)
UNION ALL
. . .
听起来基础表在视图上有索引。您可能还可以将查询简化为:
SELECT * FROM VIEW WHERE COL_A = a AND COL_B IN (d, e, . . .)
或:
SELECT * FROM VIEW WHERE COL_A IN (a, b, . . .) AND COL_B = d