【发布时间】:2019-02-18 07:24:02
【问题描述】:
我有一个返回记录列表的存储过程。
在一种情况下(type=1),这将根据页码返回前 10 条记录。
在其他情况下(type=2),这将返回所有记录。
在两种情况下选择的列都是相同的。
我正在使用 2 个 cte 来获取所需的数据。
如何实现确定否的动态部分。选择的记录;对性能的影响最小。
代码蓝图
with cte1 as
(
SELECT ....
),
cte2 as
(
SELECT ....
)
SELECT
ROW_NUMBER() OVER ( ORDER BY Col1) AS RowId,
cte1.*, cte2.PlanName
FROM
cte1
INNER JOIN
cte2 ON cte2.Id = cte1.Id
WHERE
.....\*different code here*\
谢谢
【问题讨论】:
-
我在 WHERE 中尝试了案例。但我担心性能。将 2 个进程拆分为 2 个 sp 会更好吗?
-
首先,检查参数嗅探问题,或者你可以放执行计划看看发生了什么,但到目前为止,这个问题是题外话,因为你没有问题,因为你的代码是工作
-
@BudaGavril 嗨。我面临的问题是限制没有。选择的记录,如果@type=1.. 如果@type=2,则选择所有。 IF 不能使用,因为它在 cte 之后。案例会对性能产生很大影响吗?
标签: sql sql-server sql-server-2014 sqlperformance