CONVERT_IMPLICIT的影响

时间:2012-01-21 17:33:19

标签: tsql sql-server-2008-r2

在我们正在开发的应用程序中,有一种情况是调用存储过程来声明会话。在坚果shell中,此SP根据输入参数检查会话,并删除会话if(从规范中提取)

  • 逻辑
  • 删除存在以下条件的会话行:
  • 会话行尚未过期(EXPIRES > SYSUTCDATETIME())。

以下是执行此任务的代码:

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

SESSION_ID列是PK并具有默认的聚簇索引。数据类型是uniqueidentifier。 EXPIRES的数据类型为datetimeoffset(0)

问题出在这里 - SQL Server执行CONVERT_IMPLICIT这会导致索引扫描。为了增加我的痛苦,客户拒绝共享有关数据库的元数据,我不知道生产版本将包含多少行数据。客户认为,无论最终的数据库大小如何,代码都必须尽可能高效。

除了使用CAST进行SYSUTCDATETIME()datetimeoffset(0)的显式转换之外,有没有办法解决这个问题?

谢谢,

拉​​吉

1 个答案:

答案 0 :(得分:1)

可能会更好:

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