我正在使用oracle。在查詢中對多個內部聯接進行排序以根據where子句提高性能Oracle
我有超過2個表來執行內部連接。而根據我的他們的排序問題的查詢表現。
下面是查詢:
select * from
FROM A a
INNER JOIN B b
ON a.b_ID=b.id
INNER JOIN C c
ON c.id=a.c_Id
INNER JOIN D d
ON a.d_ID=d.id
INNER JOIN E e
ON e.d_id =d.id
where e.name='abc' AND e.company_name='xyz';
在我來說,我不要求臺A,B,C的全表掃描,D.
我想申請的name
謂語過濾器和首先應用company_name
,然後應用表A,B,C,D(在執行計劃中)的內部連接。
我的問題是:這可能嗎?另外,如果我根據最終的where子句更改內連接的順序,那麼可以提高性能(如下面的查詢)嗎?
select * from
E e INNER JOIN D d
ON e.d_id =d.id
INNER JOIN A a
ON a.d_ID=d.id
INNER JOIN B b
ON a.b_ID=b.id
INNER JOIN C c
ON c.id=a.c_Id
where e.name='abc' AND e.company_name='xyz';
即使在應用此更改後,我發現,在一些DB環境,執行計劃是相同的兩個查詢。
有沒有什麼辦法可以讓我在執行查詢時訂購執行計劃的步驟,就像明確指定內部連接的順序一樣?
感謝
最好的辦法是:運行te諮詢,接受最好的計劃,並以自己爲基準,排序不會有幫助,長期使用提示表明perfs通常會再次受到影響(他們的問題是它們與代碼綁定,而諮詢不是) – Gar
所有表上的表統計信息都是最新的嗎? –
你是否擁有所有環境下的所有索引,特別是在外鍵列上? –