【发布时间】:2023-03-10 16:33:01
【问题描述】:
CREATE TABLE test (
ck INT,
pk INT,
PRIMARY KEY (ck, pk)
);
for (int i = 1; i < 10000; i++) {
sessionRW.execute(QueryBuilder.insertInto("test").value("ck", 1).value("pk", i));
}
root@cqlsh:ks> select * from test limit 5;
ck | pk
----+----
1 | 1
1 | 2
1 | 3
1 | 4
1 | 5
(5 rows)
root@cqlsh:ks> delete from test where ck = 1;
root@cqlsh:ks> insert into test(ck,pk) values (1, 0); -- new minimal value
root@cqlsh:ks> select * from test limit 1;
ck | pk
----+-------
1 | 0
(1 rows)
WARN 11:37:39 Read 1 live and 9999 tombstoned cells in ks.test (see tombstone_warn_threshold). 1 columns was reque
为什么当我使用“LIMIT 1”执行 SELECT 时会收到墓碑警告?
这些行是按 pk ASC 排序的,该表的较低 pk 值 (0) 是第一行,不会被删除。
我不明白为什么 cassandra 一直在扫描我的表以查找其他结果(因此获取了很多墓碑),因为第一行匹配并且我指定我只想要一行。
如果我没有指定 LIMIT,我可以理解警告。但是当第一行与 LIMIT 1 匹配时,扫描整个表有什么意义呢?
【问题讨论】:
标签: cassandra