我想通过创建索引来优化以下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;
当空值传递给变量时,相应的条件将被禁用。这些变量是从一个可过滤的页面中获得的。
1条答案
按热度按时间6ovsh4lw1#
没有
动态构建查询。如果
:code
为null,则省略WHERE
子句的该部分。等等。然后你会有一个混合的组合。构建几个可能的2列索引。让它们服务于需要在两列中的第一列上索引的情况。也就是说,
INDEX(code, barcode)
将适用于以下任一项:和