簡體   English   中英

調優 Oracle 查詢慢速 select

[英]Tuning Oracle Query for slow select

我正在處理一個 oracle 查詢,該查詢正在一個巨大的表上執行 select,但是與其他表的連接似乎在處理時間方面花費了很多。

我正在尋找有關如何改進此查詢工作的提示。

我附上了一個版本的查詢和它的解釋計划。

詢問

 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 服務器數據庫,所以我需要它這么大,我不能縮小查詢的 scope。 目的是將其設置為具有 SSIS 的 sql 服務器作業,以便定期運行

因為我不知道這個查詢返回多少行或者這個表/視圖有多少行。

我可以為您提供一些簡單的提示,這些提示可能對您提高查詢性能有所幫助:

  1. 檢查索引。 SQL 語句的 WHERE 和 JOIN 部分中使用的所有字段都應該有索引。

  2. 限制工作數據集的大小。

  3. 您只需要 select 列。

  4. 刪除不必要的表格。

  5. 刪除 JOIN 和 WHERE 子句中的計算列。

  6. 如果可能,請使用內連接,而不是外連接。

您的視圖包含大量數據,因此您還可以分解並僅限制此視圖中您需要的信息

一個明顯的建議是不要在 select 子句中使用子查詢。

相反,您可以嘗試加入表格。

SELECT
    l.gl_date,
    l.REST_OF_TABLES
    t.task_id
FROM
    aaa.jeg_labor_history   l
    Join bbb.jeg_pa_projects_all p
    On (l.project_id = p.project_id)
    Left join (SELECT
        tt.project_id, 
        tt.task_number,
        MAX(tt.task_id) task_id
    FROM
        bbb.jeg_pa_tasks tt
    Group by tt.project_id, tt.task_number) t
    On (l.project_id = t.project_id
            AND l.task_number = t.task_number)
WHERE
    p.org_id = 2165
    AND p.project_status_code = '1000';

干杯!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM