Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

何時使用索引

內建索引最適合於包含許多列的表格,而這些列包含索引值。特定欄位中存在的唯一值越多,查詢和維護索引所需的平均開銷就越大。例如,假設您有一個 races 表格,其中包含數百場比賽中十億筆自行車手的資料,而且您想按自行車手查詢排名。許多自行車手的排名會在比賽年份的欄位中共用相同的值。race_year 欄位是索引的良好候選對象。

如果需要次要索引,而且這些索引是根據資料表中一個或多個欄位(而不是分區金鑰)建立的,請使用儲存附加索引 (SAI)。如需詳細資訊,請參閱 CREATE CUSTOM INDEX

使用索引的情況

在下列情況下不要使用索引

使用高基數欄位索引的問題

如果您在高基數欄位上建立索引(此欄位有許多不同的值),則欄位之間的查詢會導致許多搜尋,但只會產生很少的結果。在包含十億首歌曲的表格中,按作者(每個歌曲通常是唯一值)而不是按錄音藝術家來查詢歌曲可能會非常沒有效率。

手動維護表格作為索引的一種形式,可能會比使用內建索引更有效率。對於包含唯一資料的欄位,有時使用索引會為了方便而提升效能,只要對具有索引欄位的表格的查詢量適中,而且不會持續處於負載狀態。

反過來說,在極低基數的欄位(例如布林欄位)上建立索引是沒有意義的。索引中的每個值會變成索引中的單一行,例如,這會導致所有 false 值產生一個巨大的列。索引具有 foo = true 和 foo = false 的多個索引欄位並無用處。

在頻繁更新或刪除的欄位上使用索引的問題

資料庫會將墓碑儲存在索引中,直到墓碑限制達到 100K 個儲存格。超過墓碑限制後,使用索引值查詢會失敗。

在大型分割區中使用索引尋找列的問題,除非查詢範圍很窄

大型叢集中的索引欄位查詢通常需要整理來自多個資料分割區的回應。隨著叢集中加入更多機器,查詢回應會變慢。在大型分割區中尋找列時,請縮小搜尋範圍,以避免查詢效能降低。