何時使用索引
內建索引最適合於包含許多列的表格,而這些列包含索引值。特定欄位中存在的唯一值越多,查詢和維護索引所需的平均開銷就越大。例如,假設您有一個 races 表格,其中包含數百場比賽中十億筆自行車手的資料,而且您想按自行車手查詢排名。許多自行車手的排名會在比賽年份的欄位中共用相同的值。race_year
欄位是索引的良好候選對象。
如果需要次要索引,而且這些索引是根據資料表中一個或多個欄位(而不是分區金鑰)建立的,請使用儲存附加索引 (SAI)。如需詳細資訊,請參閱 CREATE CUSTOM INDEX。
不使用索引的情況
在下列情況下不要使用索引
-
在高基數欄位上,針對大量記錄查詢少數結果。請參閱下方的 使用高基數欄位索引的問題。
-
在使用計數器欄位的表格中。
-
在頻繁更新或刪除的欄位上。請參閱下方的 在頻繁更新或刪除的欄位上使用索引的問題。
-
在大型分區中尋找列,除非查詢範圍很小。請參閱下方的 在大型分區中使用索引尋找列(除非查詢範圍很小)的問題。
-
不要在同一個表格中新增次要索引和搜尋索引。
使用高基數欄位索引的問題
如果您在高基數欄位上建立索引(此欄位有許多不同的值),則欄位之間的查詢會導致許多搜尋,但只會產生很少的結果。在包含十億首歌曲的表格中,按作者(每個歌曲通常是唯一值)而不是按錄音藝術家來查詢歌曲可能會非常沒有效率。
手動維護表格作為索引的一種形式,可能會比使用內建索引更有效率。對於包含唯一資料的欄位,有時使用索引會為了方便而提升效能,只要對具有索引欄位的表格的查詢量適中,而且不會持續處於負載狀態。
反過來說,在極低基數的欄位(例如布林欄位)上建立索引是沒有意義的。索引中的每個值會變成索引中的單一行,例如,這會導致所有 false 值產生一個巨大的列。索引具有 foo = true 和 foo = false 的多個索引欄位並無用處。