我正在尝试在我的cassandra数据存储上创建多个索引。我的模式如下
id: integer primary key
field1: text
field2: text
field3: text
field4: int
我在不同的列上创建多个索引
CREATE INDEX filed1_index ON mykeyspace.mytable ( field1 );
CREATE INDEX filed2_index ON mykeyspace.mytable ( field2 );
CREATE INDEX filed4_index ON mykeyspace.mytable ( field4 );
现在我试着如下查询数据
select * from mykeyspace.mytable where field1='filter1' and field2='filter2' allow filtering;
在使用多个索引的文档之后,我无法确定是否使用了我在上面创建的索引?任何提示或解释都会非常有用。
1条答案
按热度按时间vlju58qv1#
当您在cassandra中创建一个二级索引时,cassandra本质上是为同一索引创建一个相应的隐藏表。
因此,在您的情况下,您将有3个隐藏的表
这些表是节点的本地表,因此只有存储在该特定节点中的数据才被索引。
当有多个索引时,cassandra使用具有最高选择性的索引来查找需要加载的行。一旦选择了最高的选择性索引,其余的 predicate 就会被正常过滤。
因此,对于查询执行,只能使用一个索引,其余索引将正常过滤。你可以通过观察
这些查询不需要允许筛选
但是一个同时包含两个索引的查询
这是一篇讨论同样问题的好文章。另外,关于二级索引的任何回答都不完整,除非提到始终将二级索引与分区键一起使用以获得最大效率。