我想在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)
非常慢。
我该怎么做才能加快查询速度?
答案 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,它表现得更好,因为我猜,在这种情况下它会使用索引。