我有以下两条 SQL 语句
第一:
IF(@User_Id IS NULL)
BEGIN
SELECT *
FROM [UserTable]
END
ELSE
BEGIN
SELECT *
FROM [UserTable] AS u
WHERE u.[Id] = @User_Id
END
第二个:
SELECT *
FROM [UserTable] AS u
WHERE (@User_Id IS NULL OR u.[Id] = @User_Id)
这两个查询都将包装在它自己的存储过程中。我怀疑 IF 语句会导致大量的 SQL 重新编译。我面临着要么将 IF 语句的每个部分分成自己的存储过程,要么用 WHERE 子句替换整个 IF 语句(如上图的第二个 SQL 语句所示)
我的问题是:从性能角度来看,这两条语句有什么区别,SQL 将如何处理每条语句?
谢谢。