Tsql 转化效应

Tsql 转化效应,tsql,sql-server-2008-r2,Tsql,Sql Server 2008 R2,在我们正在开发的应用程序中,存在这样一种场景:调用存储过程来声明会话。在螺母外壳中,此SP基于输入参数检查会话,并在以下情况下删除会话(从规范中提取) 逻辑 删除存在以下条件的会话行: 会话行尚未过期(EXPIRES>SYSUTCDATETIME()) 以下是执行此任务的代码: DELETE SESSIONS WHERE SESSION_ID = @p_session_id AND EXPIRES > SYSUTCDATETIME(); SESSION\u ID列是主键,具有默认

在我们正在开发的应用程序中,存在这样一种场景:调用存储过程来声明会话。在螺母外壳中,此SP基于输入参数检查会话,并在以下情况下删除会话(从规范中提取)

  • 逻辑
  • 删除存在以下条件的会话行:
  • 会话行尚未过期(
    EXPIRES>SYSUTCDATETIME()
以下是执行此任务的代码:

DELETE SESSIONS
WHERE SESSION_ID = @p_session_id
  AND EXPIRES > SYSUTCDATETIME();
SESSION\u ID
列是主键,具有默认聚集索引。数据类型为uniqueidentifier
EXPIRES
属于数据类型
datetimeoffset(0)


这就是问题所在-SQL Server执行
CONVERT\u IMPLICIT
,这会导致索引扫描。让我更痛苦的是,客户拒绝共享关于数据库的元数据,我也不知道生产版本将有多少行数据。客户认为,无论最终的数据库大小如何,代码都需要尽可能高效

除了使用CAST将
SYSUTCDATETIME()
显式转换为
datetimeoffset(0)
,还有什么方法可以解决这个问题吗

谢谢

拉吉可能会更好:

DELETE SESSIONS
WHERE SESSION_ID = @p_session_id
  AND EXPIRES > SYSDATETIMEOFFSET();

“客户拒绝共享数据库的元数据”。。。哈哈?:)生活就是这样。我想这需要各种各样的guess@Rah没关系,但如果您试图解决客户的数据库问题,而db的元数据是隐藏的,这是非常奇怪的……什么是“没有元数据”?您必须知道运行查询和查看计划的数据类型…我知道所有这些。缺少的是DB指标,例如有多少并发用户?PROD中DB的大小是多少?很抱歉,如果我使用元数据这个术语太广泛,让您感到困惑。