我正在处理一个具有可选筛选器的查询,因此假设表名是products,筛选器是id(主键)
如果过滤器不存在,我会这样做:
SELECT * FROM products;
如果过滤器存在,我需要执行以下操作:
SELECT * FROM products WHERE id = ?;
我发现了一些潜在的解决方案,可以在sql中混合使用2,而不是在后端代码本身中执行条件
SELECT * FROM products WHERE id = IF(? = '', id, ?);
或者
SELECT * FROM products WHERE IF(? = '',1, id = ?);
我只是想知道哪一个会更快(在多个过滤器或一个非常大的表的情况下),或者有更好的解决方案来处理这种情况?
2条答案
按热度按时间laximzn51#
更好的方法是构造
WHERE
可用参数中的子句。这允许优化器做得更好。vjrehmav2#
最简单的方法是
OR
:请注意,由于您将添加越来越多的条件
AND
,生成的计划至少会很差。没有适合他们所有人的解决方案。如果可能,您应该使用条件逻辑构建查询。更多信息:“kitchen sink”过程(sql server-但想法相同)