两条insert batch插入语句的差异及二者是否等价的问题
两条INSERT BATCH语句的差异与等价性结论
这两条是QuestDB专属的批量插入语法,二者并不等价,核心差异在systimestamp()函数的求值逻辑上,具体差异如下:
- 对q1语句:
语句里的两个insert batch 2 into tab values(1, systimestamp()),(2, systimestamp())systimestamp()会逐行单独求值,最终插入的两行数据的ts列是两个不同的时间戳,存在纳秒/微秒级的差值。 - 对q2语句:
SELECT子句中的insert batch 2 into tab select cast(x as int),systimestamp() from long_sequence(2)systimestamp()会在查询启动时一次性完成求值,整个查询仅生成一个时间戳,两行数据的ts列值完全相同。
除此之外还有两个次要差异:
- q1的插入值是硬编码写死的,仅能固定插入2行值为1、2的数据;q2可以通过修改
long_sequence()的参数灵活调整插入行数,适合生成批量测试数据。 - 插入行数较多时,q2的执行效率和代码可维护性都优于手动拼接多行VALUES的q1写法。
内容的提问来源于stack exchange,提问作者marregui
相关产品推荐
相关产品推荐

