我有一個運行得非常快的小查詢。不知何故,我認爲增加一個索引到一個無索引的欄目會讓它更快,但事實證明它沒有。事實上,它確實增加了我的磁盤讀取和執行時間。我想問的是,有人可以向我解釋有關索引如何工作的詳細信息,以及爲什麼它會降低性能而不是增加性能。戴上索引後磁盤/數據讀取增加
在此先感謝!
PS:我的RDBMS:Oracle
我有一個運行得非常快的小查詢。不知何故,我認爲增加一個索引到一個無索引的欄目會讓它更快,但事實證明它沒有。事實上,它確實增加了我的磁盤讀取和執行時間。我想問的是,有人可以向我解釋有關索引如何工作的詳細信息,以及爲什麼它會降低性能而不是增加性能。戴上索引後磁盤/數據讀取增加
在此先感謝!
PS:我的RDBMS:Oracle
完全可能在一張小桌子上。如果表格確實很小,那麼可以通過一次讀取將表格完全讀入內存,並且全表掃描可以完全在內存中執行。在這裏添加一個索引需要至少讀取一個索引頁面,然後讀取數據頁面,以使I/O翻一番。這是一個不尋常的情況,但並非前所未聞。
但是,這只是我的猜測而已。要真正瞭解發生了什麼,可以通過索引獲取查詢的執行計劃,然後刪除索引並獲取沒有索引的執行計劃。比較計劃,並決定是否要重新添加索引。
分享和享受。
這不是一個真正的編程問題;它更像是一個DBA問題(關於管理你的數據庫)。投票將其遷移到[DBA](http://dba.stackexchange.com),在那裏更合適。 –
@Ken White:我不同意。這是一個關於數據結構和算法的問題。有些人可能會與DBA處理與索引有關的任何事情,但這並不意味着這不是一個編程問題。 –
@jonearles:對不起,我不同意。這是一個關於數據庫管理的問題(索引如何工作,如何正確使用它們以及索引如何影響性能)。這不是關於「我如何編寫代碼來快速查找此數據結構?」。除非你有權訪問Oracle索引和數據結構的內部,也就是說,這個問題特別針對這些內部問題。我在這裏沒有看到。即使程序員正在做DBA工作,它仍然是DBA的工作。 :-) –