Index

索引經常更新的表的 UpdatedAt/ModifiedAt 對性能有何影響?

  • June 9, 2022

我讀過經常更新的索引列可能不利於性能。

但是我想知道即使對於本質上是增量的列,是否也是這種情況?例如,給定一個看到大量更新的表,UpdatedAt 列將非常頻繁地更新。但它總是會更新為更新的值,這些值可以附加在索引的末尾。現有索引的主要部分將看不到任何更新。因此,對於使用 UpdatedAt 列進行查詢的案例,在大多數情況下,該列上的索引不是風險最小嗎?

頻繁更新的索引列可能不利於性能

這種說法過於籠統,沒有意義。索引列在查詢時當然可以提高性能,無論它們的更新頻率如何*。*

確實,每當更新表中的索引列時,都會產生更新索引的成本。此成本涉及刪除舊索引條目並添加新索引條目,這可能會導致頁面拆分、添加新頁面或頁面合併(取決於特定的 DBMS 和儲存引擎)。

列上的索引(或者,就此而言,任何具有單調遞增值的UpdatedAt列)的索引也不會導致頁面拆分,這也是事實。另一方面,此類索引有其自身的問題——並發會話將爭奪對同一索引最後一頁的訪問權,這通常會創建一個閂鎖熱點,因此會以自己的方式損害性能。

最後,UpdatedAt作為前導(或唯一)列的索引不太可能非常有用,如果它不是前導列,那麼它具有單調遞增值的好處就消失了。

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