Oracle
反對使用本地索引的原因
對於 Oracle 10g 及更高版本:除了不能使用本地索引並且需要全域索引(例如唯一約束)的情況外,是否有任何理由支持全域索引而不是本地索引?
有一點是,使用索引的查詢訪問了足夠多的分區,本地索引會比全域索引慢。
例如,如果您的表按日期分區,但您只查詢狀態列。
利的回答已經指向主要的倒退。
但他的回答只有在匹配記錄的基數很小的情況下才是正確的。如果要搜尋的列具有唯一或幾乎唯一的值,那肯定會很差(但狀態列通常不是這種情況)。在這種情況下,會訪問很多本地索引,成功率非常低,從而產生大量無用 I/O,效率非常低。在這種情況下,全域索引的工作效率要高得多。
但是,它取決於分區的數量、與匹配記錄數量相關的分區大小。
如果您選擇更多的記錄並有機會在許多分區中找到它們,那麼這個回撤就不再是真正相關的了。這通常是狀態列的情況,只有幾個不同的值。
例如:
有一個包含 100 個分區的表,例如按 DATE,並且您只想搜尋狀態列:如果匹配記錄的基數是 10000,那麼您可能會在每個分區中找到記錄。在這種情況下,您不會從 GLOBAL 索引中獲得真正的好處,儘管它可能會快幾毫秒。但是 LOCAL 索引的好處往往克服了這種倒退。
反對本地索引的另一個原因可能是索引維護需要更多知識。例如,重建 LOCAL 索引不能像 GLOBAL 索引那樣僅通過“ALTER INDEX xxx REBUILD”來完成,因為每個分區都需要被定址和重建。這在 24/7 小時執行期間可能是一個很大的優勢,但有些人不喜歡這樣的努力。