我有一个postgresql查询,它使用基于键集的方法进行分页。
SELECT *
FROM public.values_with_variable_view
WHERE ( timestamp, id) > ('2024-01-04 01:12:09.267335+00',1996)
ORDER BY ( timestamp, id) asc
LIMIT 100
字符串
我需要在c#中使用LINQ来写这个代码,我试着在.Where(x=>x.timestamp > '2024-01-04 01:12:09.267335+00' && x.id > 1996)
中使用where子句,但它给出了不同的结果。
这里是DBFiddle
2条答案
按热度按时间vql8enpb1#
您应该添加
||
部分:字符串
31moq8wy2#
我建议使用
.Where(x => x.timestamp >= last.timestamp && (x.timestamp > last.timestamp || x.id > last.id))
,这样可能会有更好的性能。在前面使用x.timestamp >= last.timestamp
条件,而不使用替代的 * 或 * 条件,应该会提高索引的使用率。条件的第二部分会在初始索引查找后优化筛选器。再结合斯维亚托斯拉夫·丹尼利夫帖子里的代码,答案应该是:
字符串
请参阅this updated fiddle。
注意,我已经在测试表上为
(timestamp, id)
添加了一个索引。要真实的确定哪一个是最好的,应该对实时数据(可能远远大于25行)尝试两种选择,并检查执行计划的性能。