postgresql 如何根据动态SQL查询创建索引?

wz1wpwve  于 2023-06-29  发布在  PostgreSQL
关注(0)|答案(1)|浏览(162)

我想通过创建索引来优化以下SQL查询的性能。查询根据输入变量筛选结果,允许空值进行可选筛选。我对PostgreSQL解决方案特别感兴趣。如何创建索引以加快此查询?

SELECT *
FROM product p
WHERE (:code IS NULL OR p.code = :code)
  AND (:barcode IS NULL OR p.barcode = :barcode)
  AND (:category_id IS NULL OR p.category_id = :category_id)
  AND (:brand_id IS NULL OR p.brand_id = :brand_id)
ORDER BY p.last_modified_date;

当空值传递给变量时,相应的条件将被禁用。这些变量是从一个可过滤的页面中获得的。

6ovsh4lw

6ovsh4lw1#

没有
动态构建查询。如果:code为null,则省略WHERE子句的该部分。等等。
然后你会有一个混合的组合。构建几个可能的2列索引。让它们服务于需要在两列中的第一列上索引的情况。也就是说,INDEX(code, barcode)将适用于以下任一项:

WHERE p.code = :code
   AND p.barcode = :barcode

WHERE p.code = :code
   -- without testing for barcode.

相关问题