一、语法规范
LIMIT constant_integer_literal
核心限制:
·类型限制:当前版本仅支持非负整数字面量(如 10)。
·不支持表达式:无法使用算术运算(2+2)、函数(LENGTH())、类型转换(CAST())或科学计数法(1e6)。
·不支持子查询:参数必须是静态确定的。
·风格限制:不支持 MySQL 风格的 LIMIT start, n。
| 场景 | 错误写法 (Unsupported) | 正确写法 (Supported) |
| 表达式 | LIMIT 10 + 5 | LIMIT 15 |
| 函数 | LIMIT LENGTH('abc') | LIMIT 3 |
| 偏移量 | LIMIT 2, 10 | LIMIT 10 OFFSET 2 |
二、执行逻辑
在 TCHouse-X 中,LIMIT 不仅仅是过滤数据,它具有显著的性能加速作用:
·本地限制:每个计算节点在本地扫描时,达到 LIMIT 数量后即停止扫描。
·减少网络开销:仅传输必要的行数到协调节点,大幅降低节点间的通信延迟。
·内存保护:防止由于 WHERE 条件过宽导致的海量数据涌入内存。
三、典型使用场景
·Top-N / Bottom-N 查询:必须配合 ORDER BY 使用,例如获取“评分最高的前 10 件商品”。
·语法验证:使用 LIMIT 0。系统会解析并生成执行计划,但不会执行实际的 I/O 或返回数据,适合测试 SQL 合法性。
·数据采样:不带 ORDER BY 使用 LIMIT。由于不需要全局排序,这种方式开销极低,适合预览表数据结构。
·分页处理:配合 OFFSET 使用。
注意:分页建议:在大数据场景下,高偏移量的 OFFSET 会导致查询变慢(因为系统仍需读取并丢弃前面的行)。最佳实践是尽可能在应用端进行数据缓存。
四、基础用法
— 获取满足条件的前 2 条记录SELECT x FROM numbers WHERE x > 2 LIMIT 2;
五、Top-N 排序
— 获取数值最高的前 3 名SELECT x AS "Top 3" FROM numbers ORDER BY x DESC LIMIT 3;
六、偏移量分页
— 跳过前 2 行,获取接下来的 3 行记录SELECT * FROM numbers LIMIT 3 OFFSET 2;
七、特殊限制与说明
·子查询限制:在 EXISTS 和 IN 操作符中使用的相关子查询内部,严禁使用 LIMIT 子句。
·顺序保证:若不配合 ORDER BY 使用,LIMIT 返回的行具有不确定性,即多次执行结果可能因分布式扫描顺序不同而改变。