使用IN运算符查询的索引加速postgres上的最小/最大操作

时间:2015-06-16 15:22:26

标签: postgresql postgresql-9.3

我想在postgres中优化以下查询

SELECT(MIN("products"."shipping") AS minimal FROM "products" WHERE "products"."tag_id" IN (?)

带有像

这样的索引
CREATE INDEX my_index ON products (tag_id, shipping DESC);

不幸的是,只有当它只是一个标签时才使用。几乎是最常见的是同时查询一些标签,但是postgres使用的索引products (shipping DESC)非常慢。 我该怎么做才能加快查询速度?

1 个答案:

答案 0 :(得分:2)

原来(请看评论),这个查询:

SELECT MIN(minimal) AS minimal 
FROM ( 
  SELECT  MIN("products"."shipping") AS minimal 
  FROM "products" 
  WHERE "products"."tag_id" IN (?,?,?,?,?,?,?) 
  GROUP BY "tag_id" 
) some_alias

能够以这样的方式欺骗​​PostgreSQL,它表现得更好,因为我猜,在这种情况下它会使用索引。