首页 > 解决方案 > 有没有索引可以让下面的查询更快

问题描述

我需要更快地进行以下查询:

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (ORDER BY id ASC) AS rownum
      FROM table
      WHERE user = $1 AND bool_value = False) x
WHERE rownum = $3

有没有索引可以做到这一点?

标签: sqlpostgresql

解决方案


我建议这样写:

SELECT *
FROM table
WHERE user = $1 AND bool_value = False
ORDER BY id
OFFSET $3 FETCH FIRST 1 ROW ONLY;

请注意,$3这里比您的版本少一个。而且,这不包括结果集中的行号——尽管如果你真的想要它,你可以很容易地添加它。

然后你想要一个关于(user, bool_value, id). 前两列可以按任意顺序排列。该索引也应该适用于您的查询。


推荐阅读