不要使用允许过滤。它不执行或
规模,因为它允许您以它的方式查询 Cassandra
并非旨在支持。
当您尝试 ORDER BY 两件事时,CQL 将您的语句解释为 ORDER BY
roll_number ASC and age=24。
AND 属于您的 WHERE 子句,需要指定
之前订购。
Cassandra 使用您的集群键来写入您的数据
磁盘排序顺序。 ORDER BY 只允许您翻转排序
聚类顺序的方向(升序与降序)。所以
如果您已经在表格中指定了正确的排序顺序
定义,则无需指定 ORDER BY。
要同时通过ID 和age 查询您的表,您需要
将这两列作为前两列设计您的 PRIMARY KEY。
您只能查询 PRIMARY KEY 中定义的列(辅助
索引无法承受),然后仅以相同的顺序(您
不能跳过键)。为此,我创建了一个查询表
(sujataByIDAndAge) 看起来像这样:
.
CREATE TABLE sujataByIDAndAge (
ID int,
roll_number int,
age int,
PRIMARY KEY (ID,age,roll_number));
现在插入几行后:
aploetz@cqlsh:stackoverflow> INSERT INTO sujatabyidandage (id, roll_number, age)
VALUES (2, 20, 26);
aploetz@cqlsh:stackoverflow> INSERT INTO sujatabyidandage (id, roll_number, age)
VALUES (1, 100, 24);
aploetz@cqlsh:stackoverflow> INSERT INTO sujatabyidandage (id, roll_number, age)
VALUES (1, 110, 24);
aploetz@cqlsh:stackoverflow> INSERT INTO sujatabyidandage (id, roll_number, age)
VALUES (1, 190, 24);
现在我可以运行您的查询,我不需要指定 ORDER BY 或 ALLOW FILTERING:
aploetz@cqlsh:stackoverflow> SELECT COUNT(*) FROM sujatabyidandage WHERE ID=1 AND age=24;
count
-------
3
(1 rows)
另外值得一提的是,如果结果集顺序对您很重要,那么您必须按主键查询。 Cassandra 仅在分区键(在您的情况下为 ID)中强制执行结果顺序。