Kha*_*lil 4 sql-server type-conversion offset-fetch paging sql-server-2014
在研究不同的查询计划以提高性能时,我注意到 FETCH 正在隐式转换为bigint
.
示例表和查询:
CREATE TABLE checkPagintion
(
Id INT NOT NULL PRIMARY KEY CLUSTERED,
Name NVARCHAR(100)
)
DECLARE @paramPageNumber AS INT,
@paramPageSize AS INT;
SELECT *
FROM checkPagintion
ORDER BY Id
OFFSET @paramPageNumber ROWS
FETCH NEXT @paramPageSize ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
此查询的执行计划:
我的问题:我应该对所有分页查询使用 bigint 吗?如果我使用 int 会不会有问题,因为implict_conversion 以性能低下着称?
它正在转换您的变量,因为bigint
这OFFSET ... FETCH
是对这些值的期望。这可能是有道理的
DECLARE @paramPageNumber AS BIGINT,
@paramPageSize AS BIGINT;
Run Code Online (Sandbox Code Playgroud)
以避免这可能导致的任何可能的性能问题。
你id
在你的表列,但是,仍然应该罚款的int
。
从文档中TOP (Transact-SQL)
:
Run Code Online (Sandbox Code Playgroud)-- Syntax for SQL Server and Azure SQL Database [ TOP (expression) [PERCENT] [ WITH TIES ] ]
参数
expression
是指定要返回的行数的数值表达式。如果指定,则表达式隐式转换为浮点值PERCENT
;否则,它被转换为bigint。