Sql server SQL Server强制转换性能
在查询中,我将nvarchar数据类型转换为数字(精度、比例)。 以下是问题-Sql server SQL Server强制转换性能,sql-server,query-optimization,query-performance,Sql Server,Query Optimization,Query Performance,在查询中,我将nvarchar数据类型转换为数字(精度、比例)。 以下是问题- SELECT FIELD_VALUE, FREQUENCY_COUNT FROM Table1 T1 INNER JOIN Table2 T2 ON T1.FIELD_KEY = T2.FIELD_KEY INNER JOIN Table3 T3 ON T3.FUNCTION_KEY = T1.FUNCTION_KEY WHERE T3.PROFILE_RUN_KEY = 65 AND T2.FIEL
SELECT FIELD_VALUE,
FREQUENCY_COUNT
FROM Table1 T1
INNER JOIN Table2 T2
ON T1.FIELD_KEY = T2.FIELD_KEY
INNER JOIN Table3 T3
ON T3.FUNCTION_KEY = T1.FUNCTION_KEY
WHERE T3.PROFILE_RUN_KEY = 65
AND T2.FIELD_NAME = 'DEPT_ID'
AND
CASE
WHEN T2.IS_VIRTUAL = 0
THEN T2.RECORD_NAME
ELSE T1.RULE_NAME
END = 'EMPLOYEES'
ORDER BY FREQUENCY_COUNT DESC,
CAST(FIELD_VALUE AS NUMERIC(4,0)) DESC;
此查询的性能太低。
在做了一些随机的点击和试用后,我改变了像这样的铸造部分-铸造(字段_值为数字),性能得到了改善
有人能解释一下原因吗?(如果需要更多信息,请告诉我)
此处使用的表的行数少于100行。某些字段值也为空。查看系统在何处进行转换会很有趣。可能快结束了,这意味着这只发生在不到100行的地方。我很惊讶地得知,这甚至会产生可测量的差异 “隐式”转换将
字段_值
转换为9字节的数字(18,0),而显式转换会产生5字节的数字(4,0)
虽然9和5都是“关闭”的数字,但很难相信这一点
*转换本身有很大的不同
*对100*5字节的列表进行排序比对100*9字节的列表进行排序慢
我试图复制你的发现,如下所示,但在持续时间上没有发现任何差异。(估计尺寸略有不同,但与预期一致)。如果它没有显示为10万行,那么我很难相信它会显示为100行
是否您看到了缓存的效果,并错误地将其归因于
SET STATISTICS TIME ON
IF OBJECT_ID('t_test') IS NOT NULL DROP TABLE t_test
SELECT TOP 100000 FIELD_VALUE = Right(Convert(nvarchar(100), BINARY_CHECKSUM(NewID())), 4)
INTO t_test
FROM sys.objects, sys.columns, sys.types
GO
SELECT FIELD_VALUE
FROM t_test
ORDER BY CAST ( FIELD_VALUE AS NUMERIC(4, 0))
GO 3
SELECT FIELD_VALUE
FROM t_test
ORDER BY CAST ( FIELD_VALUE AS NUMERIC)
GO 3