问题描述
执行诸如select * from table limit 10
之类的cqlsh查询时,cassandra会扫描整个表并只返回前10条记录吗,还是可以在整个数据中心中精确定位前10条记录而无需扫描整个表?
解决方法
LIMIT
选项在查询返回的最大行数上设置上限,但这不会阻止查询执行全表扫描。
Cassandra具有诸如请求超时之类的内部机制,可以防止不良查询导致群集崩溃,因此查询更有可能超时,而不是对所有节点/副本进行扫描而使群集超载。
请注意,LIMIT
选项与SELECT COUNT()
一起使用时无关紧要,因为count函数仅返回1行(根据设计)。无论设置了多少限制,COUNT()
都需要进行全表扫描。我在这篇文章https://community.datastax.com/questions/6897/中对此做了更详细的说明。干杯!
LIMIT选项在查询返回的最大行数上设置上限,但不会阻止查询执行全表扫描。