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 次浏览

启动你的 职业生涯

通过完成课程获得认证

开始
广告