Query-Performance

嵌套查詢的最佳索引?

  • October 15, 2021

我有一個嵌套查詢,我不確定我選擇的索引是否適合它的需要。目前我對它的表現並不滿意。該表包含 > 2 個 Mio 行計數。我正在與甲骨文合作。

我的查詢:

SELECT
   *
FROM
   mytable where groupid IN ( 
           SELECT
              groupid
           FROM
              mytable where contractid IN (:contractids:) or predecessorContractId in (:contractIds:) 
);
  • contractId: 有很多不同的存在
  • groupId:連接的行(predecessorContractId 匹配contractId)共享相同的groupId,以便能夠更有效地選擇合約鏈。也有很多。

我的索引:

CREATE INDEX "MyIndex" ON "MyTable" ("contractId", "predecessorContractId", "groupId");

有沒有辦法提高我的指數?也許也是我的查詢?

如果我做對了,

您從一組契約 ID 開始收集與它們相對應的一組組 ID。然後,您想要收集該集合中具有組 ID 的所有行。

根據定義,這意味著 DBMS 必須進行表掃描。您最好的機會是創建第二個索引,其中組 ID 是第一個屬性(例如組 ID、契約 ID)。然後,系統可以選擇使用第二個索引獲取“所有具有此類組 id 的行”(在消除在步驟 1 中找到的重複組 id 之後)。

為了提供predicateContractId 上的謂詞,您還需要第三個索引,其中previousContractId 是第一個屬性。

引用自:https://dba.stackexchange.com/questions/301172