【发布时间】:2019-09-26 19:11:44
【问题描述】:
我正在处理一个在一个巨大的表上进行选择的 oracle 查询,但是与其他表的连接似乎在处理时间方面花费了很多。
我正在寻找有关如何改进此查询工作的提示。
我附上了一个版本的查询和它的解释计划。
查询
SELECT
l.gl_date,
l.REST_OF_TABLES
(
SELECT
MAX(tt.task_id)
FROM
bbb.jeg_pa_tasks tt
WHERE
l.project_id = tt.project_id
AND l.task_number = tt.task_number
) task_id
FROM
aaa.jeg_labor_history l,
bbb.jeg_pa_projects_all p
WHERE
p.org_id = 2165
AND l.project_id = p.project_id
AND p.project_status_code = '1000'
有一点要提: 这个查询从oracle取数据发送到sql server数据库,所以需要这么大,不能缩小查询范围。 目的是将其设置为带有 SSIS 的 sql server 作业,以便定期运行
【问题讨论】:
-
学习使用正确、明确、标准
JOIN语法! -
无论语法如何,这似乎更多是您正在使用的视图和缺少索引以提高性能的问题。
-
我们需要表结构/视图定义吗?没有它,我们也处于黑暗之中。查询优化首先要了解数据类型、索引的位置以及它们是如何定义的,因为在这种情况下,您最有可能需要复合(多)列索引。