可以说,我有一个查询,
SELECT * FROM MyTable WHERE MyParam = 0 OR MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)
这里 MyParam 是参数和可选的。因此,它只检查MyColumn = MyParam
MyParam 是否不为 0。但是我们的 DBA 说 OR 会使其变慢,而 db 会受到影响。另一种选择是,
IF MyParam = 0
SELECT * FROM MyTable WHERE MyColumn = MyParam
Run Code Online (Sandbox Code Playgroud)
这种方法的问题在于我们有很多可选参数。所以,我们的查询变得非常非常大。另一种选择是 CASE。
所以你们的建议是什么。我在谈论一般是 Oracle 还是 SQL Server。
在 sql 服务器中:
一种选择是动态 sql,另一种是option (recompile)
.
使用option (recompile)
:
select * from MyTable where MyParam = 0 or MyColumn = MyParam option (recompile);
Run Code Online (Sandbox Code Playgroud)
动态sql示例:
declare @sql nvarchar(max);
if nullif(@MyParam,0) is not null
begin;
set @sql = 'select * from MyTable where MyColumn=@MyParam;'
exec sp_exeuctesql @sql, '@MyParam int', @MyParam;
end;
else
begin;
set @sql = 'select * from MyTable;'
exec sp_exeuctesql @sql;
end;
Run Code Online (Sandbox Code Playgroud)
参考: