【发布时间】:2023-09-06 20:30:01
【问题描述】:
当执行像select * from table limit 10这样的cqlsh查询时,cassandra是扫描整个表并只返回前10条记录,还是可以精确定位整个数据中心的前10条记录而不扫描整个表?
【问题讨论】:
当执行像select * from table limit 10这样的cqlsh查询时,cassandra是扫描整个表并只返回前10条记录,还是可以精确定位整个数据中心的前10条记录而不扫描整个表?
【问题讨论】:
LIMIT 选项设置查询返回的最大行数的上限,但不会阻止查询执行全表扫描。
Cassandra 具有请求超时等内部机制,可防止错误查询导致集群崩溃,因此查询更有可能超时,而不是通过扫描所有节点/副本使集群过载。
附带说明,LIMIT 选项与SELECT COUNT() 一起使用时无关紧要,因为 count 函数仅返回 1 行(根据设计)。 COUNT() 需要进行全表扫描,无论设置的限制如何。我在这篇文章中更详细地解释了它——https://community.datastax.com/questions/6897/。干杯!
【讨论】:
limit 选项的文档在哪里?我已经阅读了 apache cassandra 的文档和 apache cassanra 的 datastax 分发,但我没有看到你上面提到的解释。
LIMIT can prevent a query from ranging over all partitions in a datacenter, or across multiple datacenters。这不是说limit选项可以防止全表扫描吗?
select * from table_name limit 100,之后我将传递从前一个查询结果集中获得的分页状态并再次执行相同的查询。这还会做表扫描吗? @埃里克·拉米雷斯
LIMIT 选项为查询返回的最大行数设置一个上限,但不会阻止查询执行全表扫描。
【讨论】:
limit 选项的文档在哪里?我已经阅读了 apache cassandra 和 apache cassanra 的 datastax 分发的文档,但我没有看到你上面提到的解释