用例语句跳过影响查询性能的过滤器?
Use case statement for skip a filter in where affects the performance of the query?
我为所有需要可选过滤器的查询制定了这个逻辑,所以我的问题是这是一种不好的做法吗?是否影响执行性能?
示例:
SELECT
USR_NAME,
USR_LAST_NAME
FROM
KTZ_USER
WHERE
--- OPTIONAL FILTER ---
(CASE
WHEN @V_USER_NAME IS NULL THEN 1
ELSE
CASE WHEN USR_NAME = @V_USER_NAME THEN 1
ELSE 0
END
END) = 1
@V_USER_NAME
是参数
你的 where 子句没有问题,但我会使用这个版本:
SELECT USR_NAME, USR_LAST_NAME
FROM KTZ_USER
WHERE @V_USER_NAME IS NULL OR @V_USER_NAME = USR_NAME;
通常 CASE
表达式旨在用于生成标量值。我们可以不使用它们更直接地表达您的过滤逻辑。
我为所有需要可选过滤器的查询制定了这个逻辑,所以我的问题是这是一种不好的做法吗?是否影响执行性能?
示例:
SELECT
USR_NAME,
USR_LAST_NAME
FROM
KTZ_USER
WHERE
--- OPTIONAL FILTER ---
(CASE
WHEN @V_USER_NAME IS NULL THEN 1
ELSE
CASE WHEN USR_NAME = @V_USER_NAME THEN 1
ELSE 0
END
END) = 1
@V_USER_NAME
是参数
你的 where 子句没有问题,但我会使用这个版本:
SELECT USR_NAME, USR_LAST_NAME
FROM KTZ_USER
WHERE @V_USER_NAME IS NULL OR @V_USER_NAME = USR_NAME;
通常 CASE
表达式旨在用于生成标量值。我们可以不使用它们更直接地表达您的过滤逻辑。