我有一个将参数传递给SQL中的过程的应用程序。参数之一是表值参数,其中包含要包含在where子句中的项目。
因为当我将TVP连接到具有200万行的表时,表值参数没有附加统计信息,所以查询速度非常慢。
我有什么选择?
同样,目标是将某些值传递给将包含在where子句中的过程:
从table1中选择*,其中id在其中(从@mytvp中选择id)
要么
从table1 t1中选择*在t1.id = tvp.id上加入@mytpv tvp
如何限制查询的结果(在我的情况下约为60K行)并仅从X行选择Y行?
如果我使用ROW_NUMBER()我不喜欢我的查询,因为它涉及2个选择查询..一个返回行,一个选择我需要的部分
更新:
这是我现在使用的查询:
SELECT *
FROM (
SELECT row_number() OVER (ORDER BY E.LastChangeDate DESC) AS row, E.*, U.[DisplayName] AS EntryCreatorDisplayName, U.[Email] AS EntryCreatorEmail
FROM entries e
INNER JOIN
users u
ON e.fk_user= u.id
WHERE e.EntryRank = 2
AND u.Administrator = 1
) as TableWithRows
WHERE (row >= 31 AND row <= 60)
Run Code Online (Sandbox Code Playgroud)