Apache Cassandra 中的索引概念


Apache Cassandra 中的索引是一種提高非主鍵列查詢效率和效能的方法。在 Cassandra 中,資料組織在表中,每個表都有一個主鍵,該主鍵由一個或多個唯一標識表中每一行的列組成。使用主鍵檢索資料的查詢非常高效,但使用 WHERE 子句中其他列的查詢可能會比較慢。

為了解決這個問題,Cassandra 提供了輔助索引,允許查詢除主要鍵列以外的列。輔助索引建立在表的列上,並維護一個不同的索引資料結構,該結構將索引列的值與相關的錶行關聯起來。透過在索引中查詢行,然後從表中獲取相關資料,可以快速處理該列上的查詢。

在 Cassandra 中,輔助索引有兩種型別:SASI(SSTable 附加輔助索引)和傳統輔助索引。SASI 索引比傳統輔助索引更強大,它能夠索引多個列,執行子字串搜尋並允許範圍查詢。它們比傳統輔助索引更難使用,並且佔用更多磁碟空間。

何時應該使用索引?

  • 對於包含索引項的多個行的表,最佳選擇是使用內建索引。

  • 如果給定列具有大量唯一值,則可以使用索引。

  • 如果表由於多種原因而具有額外的開銷,例如包含更多條目的列,則可以使用索引。

  • 為了查詢和維護索引,我們可以使用索引,在這些情況下,這始終是明智的選擇。

索引建立語法

CREATE INDEX IF NOT EXISTS ON TABLE NAME(column_name);

示例

讓我們建立一個名為 users 的表,其中包含列“user_id”、“user_name”和“user_email”。

CREATE TABLE users ( 
    user_id int,
    user_name text,
    user_email text
);

輸出表

user_id

user_name

user_email

您可以使用以下命令在“user_email”列上建立索引:

CREATE INDEX email_index ON users (user_email);

這將在“users”表中的“user_email”列上建立一個名為“email_index”的索引。

輸入

輸入是一個 CQL 命令,它在 users 表的 user_email 列上建立一個名為 email_index 的輔助索引。

輸出

輸出是一條訊息,指示索引是否建立成功。如果索引建立成功,我們可以使用它根據 user_email 列中的值更快地檢索資料。

您還可以透過逗號分隔多個列來建立索引:

CREATE INDEX name_email_index ON users (user_name, user_email);

這將在“users”表中的“user_name”和“user_email”列上建立一個名為“name_email_index”的索引。

輸入

輸入是一個 CQL 命令,它在 users 表的 user_email 和 user_name 列上建立一個名為 name_email_index 的輔助索引。

輸出

輸出是一條訊息,指示索引是否建立成功。如果索引建立成功,我們可以使用它根據 user_email 和 user_user_name 列中的值更快地檢索資料。

結論

需要注意的是,應謹慎使用 Cassandra 中的輔助索引,並且僅在經常查詢的列上使用。過度使用輔助索引會導致效能問題並增加儲存需求。通常,最好透過使用複合主鍵和反規範化來設計資料模型,從而最大程度地減少對輔助索引的需求。

更新於: 2023年9月7日

298 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.