【发布时间】:2019-05-24 19:12:25
【问题描述】:
查询是:
SELECT *
FROM t
WHERE a < CURRENT_TIMESTAMP
ORDER BY b
什么是最好的索引?
如果我们有另一个查询怎么办:
SELECT *
FROM t
WHERE a < CURRENT_TIMESTAMP AND c < CURRENT_TIMESTAMP
ORDER BY b
什么是最好的索引? 是否有一个索引可以同时为这两种查询提供服务?
编辑:我很抱歉在已经写了一些答案之后更改了查询。新的查询更好地反映了我的情况。
编辑:其他可能相关的详细信息:
1) 'SELECT *' 是为了简化问题而写的(实际查询不使用 *)。
2) 如果可以提高整体性能,我可以使用 LIMIT 分解查询。
【问题讨论】:
-
你需要定义什么是CURRENT_TIMESTAMP?它改变了关于它是否只是常量的占位符,或者它是否是表 t 中的实际列的问题。此外,列的类型可能很重要,您应该提供 CREATE TABLE ddl。此外,一些样本数据和传播指示可能有助于确定最适合您的指数。
-
CURRENT_TIMESTAMP 是 Postgres 提供的神奇的“常数”,它始终等于当前时间。我不知道将这个动态系统管理的变量称为“常量”在技术上是否正确。
-
如果您的数据大部分属于过去(即小于 current_timestamp),则没有任何索引有用。你也在使用
SELECT *。 -
@SalmanA,在下面的其中一个 cmets 中,他指出他正在使用限制。
-
我写 * 是为了让问题简单,但实际实现不使用 *。大多数数据属于未来(> CURRENT_TIMESTAMP),但您的观点很好,谢谢。
标签: sql postgresql