在我的代码中,我应该读取表的所有记录,并在for循环中使用此查询:
SELECT * FROM EVENT ORDER BY EV_TIMESTAMP , ID LIMIT 50000 OFFSET ...
每次OFFSET值都会更新。
但我发现通过增加OFFSET会增加查询时间。
(我也有基于此查询的投影)
我该如何解决这个问题?
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
■■根据@jarlh评论■■
更新-1-我更改了这个query_1:
SELECT * FROM EVENT ORDER BY EV_TIMESTAMP , ID LIMIT 50000 OFFSET 50000000
到这一个query_2:
SELECT * FROM CE_EVENT where internal_timestamp>='2018-06-09 16:55:27' and id>4311750001 ORDER BY INTERNAL_TIMESTAMP , ID LIMIT 50000
internal_timestamp和id应取自上一个循环。
我显示query_1大约需要2.93秒,但在下一个图像中,您可以看到query_2(具有相同的结果)需要0.92秒(100次迭代):
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
感谢@jarlh,他的建议帮助了我。
但我的问题是为什么OFFSET会影响查询效果? 这是Vertica中的错误或不当行为吗?