fetch 中的隐式转换

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 以性能低下着称?

RDF*_*ozz 8

它正在转换您的变量,因为bigintOFFSET ... FETCH是对这些值的期望。这可能是有道理的

DECLARE @paramPageNumber AS BIGINT,
         @paramPageSize AS BIGINT;
Run Code Online (Sandbox Code Playgroud)

以避免这可能导致的任何可能的性能问题。

id在你的表列,但是,仍然应该罚款的int


从文档中TOP (Transact-SQL)

-- Syntax for SQL Server and Azure SQL Database  

[   
    TOP (expression) [PERCENT]  
    [ WITH TIES ]  
]  
Run Code Online (Sandbox Code Playgroud)

参数

expression
是指定要返回的行数的数值表达式。如果指定,则表达式隐式转换为浮点PERCENT;否则,它被转换为bigint