我一直在读cassandra中的索引,但当涉及到在集合(如集合、列表或Map)上创建索引时,我有点困惑。
假设我有下表和索引
CREATE TABLE chatter.channels (
id text PRIMARY KEY,
users set<text>
);
CREATE INDEX channels_users_idx ON chatter.channels (values(users));
INSERT INTO chatter.channels (id, users) VALUE ('ch1', {'jeff', 'jenny'});
在文档中,至少我到目前为止发现的是,这可能会对性能造成巨大影响,因为索引是在节点上本地创建的。下面给出的所有示例都查询如下表
SELECT * FROM chatter.channels WHERE users CONTAINS 'jeff';
据我所知,这会影响性能,因为没有指定分区键,必须查询所有节点。但是,如果我要发出如下查询
SELECT * FROM chatter.channels WHERE id = 'ch1' AND users CONTAINS 'jeff';
(给出分区键)那么我的性能还会受到影响吗?
我怎么能亲自检查?在sql中,我可以运行explain并获得一些有用的信息。Cassandra也有类似的地方吗?
1条答案
按热度按时间rqcrx0a61#
cassandra提供了跟踪功能,这有助于跟踪cassandra中查询的读写过程。
要查看跟踪,请在其中一个cassandra节点上打开->cqlsh并运行以下命令:
我希望这有助于检查查询的性能。