假设我有一个包含字段A
和的表B
。我在A
+上进行常规查询B
,所以我在 上创建了一个复合索引(A,B)
。A
复合索引是否也会对查询进行全面优化?
此外,我在 上创建了一个索引A
,但 Postgres 仍然只使用复合索引来查询A
。如果前面的答案是肯定的,我想这并不重要,但是为什么它默认选择复合索引,如果单个A
索引可用?
我在我的 Postgres 数据库上使用 uuids 的键集分页方法,如本文所述:
但是,我注意到当我有两条日期相同的记录时,会从结果中跳过行。
例如,当我运行查询时:
SELECT id, created_at FROM collection
ORDER BY created_at DESC, id DESC
Run Code Online (Sandbox Code Playgroud)
我按照我的预期取回了记录,作为created_at
主要顺序,然后id
充当决胜局:
ID | 创建时间 |
---|---|
e327847a-7058-49cf-bd91-f562412aedd9 | 2022-05-23 23:07:22.592 |
d35c6bb8-06dd-4b86-b5c6-d123340520e2 | 2022-05-23 23:07:22.592 |
5167cf95-953f-4f7b-9881-03ef07adcf3c | 2022-05-23 23:07:22.592 |
d14f48dc-df22-4e98-871a-a14a91e8e3c1 | 2022-05-23 23:07:21.592 |
但是,当我运行查询来分页时,例如:
SELECT id, created_at
FROM collection
WHERE (created_at, id) < ('2022-05-23 23:07:22.592','d35c6bb8-06dd-4b86-b5c6-d123340520e2')
ORDER BY created_at DESC, id DESC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)
我希望取回最后两条记录,但我的结果集是
ID | 创建时间 |
---|---|
d14f48dc-df22-4e98-871a-a14a91e8e3c1 | 2022-05-23 23:07:21.592 |
我还尝试了查询的一些变体来尝试修复它,例如:
SELECT id, created_at
FROM collection
WHERE created_at < '2022-05-23 23:07:22.592' OR
(created_at …
Run Code Online (Sandbox Code Playgroud)