sql - 有没有索引可以让下面的查询更快
问题描述
我需要更快地进行以下查询:
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
有没有索引可以做到这一点?
解决方案
我建议这样写:
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)
. 前两列可以按任意顺序排列。该索引也应该适用于您的查询。
推荐阅读
- python - 解析电子邮件以识别关键字
- javascript - Django中可修改的项目符号列表
- python - 如何使用 Python 在浏览器中打开网站?
- c# - 使用 LINQ、GroupBy 更改输出样式
- extjs - Sencha ExtJs5 一个模型和一个视图中的多个模型
- c++ - MPI_DOUBLE_INT 和 C++ 结构
- sql - Pivot 为 Pivot Key 的 Null 值创建一个额外的行
- visual-studio-2013 - 客户端计算机中的 Crystal Report(加载报告失败)错误
- javascript - 什么是 .esm.js 文件,格式是什么:rollup.js 中的“es”?
- powershell - 如何计算powershell哈希表中的多个键和多个值?