在我们正在开发的应用程序中,有一个场景,其中调用存储过程来声明会话。在螺母壳中,此SP根据输入参数检查会话,并删除会话if (从规范中提取)。
如果存在以下条件,则删除会话行:(EXPIRES > SYSUTCDATETIME()).未过期的会话行
下面是执行此任务的代码:
DELETE SESSIONS
WHERE SESSION_ID = @p_session_id
AND EXPIRES > SYSUTCDATETIME();SESSION_ID列是PK,具有默认的聚集索引。数据类型是unique标识符。EXPIRES的数据类型为datetimeoffset(0)。
这是一个问题- Server执行一个CONVERT_IMPLICIT,这会导致索引扫描。更糟糕的是,客户拒绝共享有关DB的元数据,我不知道生产版本有多少行数据。客户认为,无论最终DB大小如何,代码都需要尽可能高效。
除了使用强制转换来显式地将SYSUTCDATETIME()转换为datetimeoffset(0)之外,有没有解决这个问题的方法?
谢谢,
拉杰
发布于 2012-01-21 17:49:27
可能会更好:
DELETE SESSIONS
WHERE SESSION_ID = @p_session_id
AND EXPIRES > SYSDATETIMEOFFSET();https://stackoverflow.com/questions/8955070
复制相似问题