gpt4 book ai didi

mysql - 在where子句中使用case语句更好还是构建动态查询更好

转载 作者:行者123 更新时间:2023-11-29 10:05:03 24 4
gpt4 key购买 nike

我正在构建一个查询来搜索连接具有数百万条记录的多个表的结果。 db是mysql。

虽然我的表连接条件始终保持不变,但我的 where 子句语句实际上取决于用户从 UI 选择的参数。

案例1:

   WHERE table.column1 = something 
AND
table.column2 = CASE WHEN condition1 = 0 THEN table.column
ELSE condition1 END

案例2:构造一个动态查询,根据搜索条件附加 AND 条件。

案例 1 看起来需要更多时间。你们中的任何人都可以建议采取哪一种方法,或者是否有其他更好的方法来应对本地的动态条件。

感谢您的帮助。

最佳答案

典型的逻辑不使用case,只是 bool 逻辑:

WHERE table.column1 = something  AND
(@condition1 = 0 OR table.column2 = @condition1)

(对于“全部”场景,可能经常使用 IS NULL 代替 = 0。)

这比动态 SQL 好还是坏?基本上,这是一个关于性能的问题。如果您仅在 (column1) 上有索引,那么它将用于动态查询或使用 bool (或 case)逻辑的查询。没关系。

但是,如果您在(column1,column2)上有索引,那么上面的代码可能不会使用该索引。使用动态 SQL 的等效版本使用索引,因此当您不选择所有值时,查询的执行会更快。

针对这一点,您需要平衡编译查询。这通常需要一些时间,但不会太多。如果毫秒很重要,那么编译就很重要。如果几十秒很重要,那么可能不会。

因此,您需要平衡不同的事情。动态 SQL 成为性能更好的选项并不罕见,特别是在存在多个条件时。

关于mysql - 在where子句中使用case语句更好还是构建动态查询更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52085978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com