SQL Server 2008 : Decimal column in where clause decimal part effects query speed

标签 sql sql-server sql-server-2008 tsql database-performance

我有一个小数(15,10) 列,其中包含创建日期的OLE 自动化格式。当你执行像

这样的查询时
SELECT * FROM SOMETABLE WHERE RECORDTIMEOA BETWEEN 41667 AND 41667.9999999999 --Decimal Part is 10 characters

查询在 8 或 9 秒内返回所有结果。但是,您不使用 41667 整数值,而是使用 41667.0000000000,然后查询将返回 1 秒内的所有结果。当您将 9 或 8 个字符放入第二个小数部分时,也会发生这种情况,例如

SELECT * FROM SOMETABLE WHERE RECORDTIMEOA  BETWEEN 41667 AND 41667.99999999 --Decimal part is 8 characters

我在该列上有一个非聚集索引,也许它会影响这个问题,所以我想知道以下查询之间有什么区别,为什么第一个查询在 8 秒内返回,而其他查询在 1 秒内返回?

SELECT * FROM SOMETABLE WHERE RECORDTIMEOA  BETWEEN 41667 AND 41667.9999999999
SELECT * FROM SOMETABLE WHERE RECORDTIMEOA  BETWEEN 41667 AND 41667.9999999
SELECT * FROM SOMETABLE WHERE RECORDTIMEOA  BETWEEN 41667.0000000000 AND 41667.9999999999

如果您能提供帮助,请告诉我..

更新:我正在为查询添加两个执行计划

This is the execution plan of slow query.

This is the execution plan of fast query.

UPDATE :这是应用 CAST 方法后的执行计划 This is the execution plan after CAST method applied.

最佳答案

这里可能正在进行数据转换,导致索引无法使用。最好的办法是查看 SSMS 为两个查询生成的查询计划,并查看是否对较慢的查询进行扫描而不是查找。

如果两个查询都在进行查找,则可能是缓存的情况。这些行(和查询计划)已经在内存中并被缓存,以实现更快的查询。

关于SQL Server 2008 : Decimal column in where clause decimal part effects query speed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21406670/

相关文章:

c# - 如何在 MVC 中显示列总和

sql-server - 将 SQL 列转换为行

sql-server-2008 - SQL Server 生成带有标识插入的脚本

sql - 根据特定的子字符串短语获取数值

mysql - 如何在 Rails 3 中生成月度数据报告

php - 动态匹配多个类别的项目

SQL Server : merge subqueries without duplicate

c# - SQL语法错误: Remove/Disclude Apostrophe's?

mysql - 包含多个 'Not Like' 的 Where 语句

sql - 改进/优化 SQL Server 中的 LEFT JOIN