我在一次求職面試中聽到了這個問題,面試官說,是的。我的問題是為什么,誰能舉個例子說明索引使搜索時間變長而不是變短。
uj5u.com熱心網友回復:
是的,它可以。
如果適用的話,一個額外的索引為一個查詢增加了可能的執行計劃。Postgres查詢計劃器對各種可能的計劃進行了成本估算,最快的估算值獲勝。由于這些是估計,實際的查詢計劃可能總是有偏差。一個使用新索引的選定的查詢計劃可能會比另一個沒有使用的計劃慢。 如果你的服務器配置得當(成本和資源設定,當前的列統計,......),這種結果不太可能,但仍有可能。這種情況幾乎對每一個查詢都可能發生。對于更復雜的查詢來說更有可能。而且有些型別的查詢是出了名的難以估計。
相關鏈接
相關的:
另外,索引總是會增加寫入成本,所以如果你的資料庫是重寫型的,并且機器已經飽和,更多的索引會使整體性能下降。
uj5u.com熱心網友回復:
一個微不足道的例子是在一個只有很少行的表上。
索引搜索必須將索引加載到記憶體中,然后再查找原始資料。 如果一個表只有幾條記錄,它們可能適合于一個資料頁。 因此,一個完整的表掃描需要加載一個頁面。
任何索引搜索(在冷快取上)需要加載兩個資料頁--一個用于索引,一個用于資料。 這可能會比僅僅掃描單頁上的行要長(顯著)。
在一個大表中,如果 "搜索 "回傳表中相當大比例的行,那么索引搜索最終會以不同于其存盤方式的順序來獲取這些行。 如果資料頁在記憶體中不固定,那么你就會出現一種被稱為thrashing的情況,這意味著每條新行都很有可能是一次快取缺失。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/324204.html
標籤:
