mssql sqlserver 处理”CONVERT_IMPLICIT”警告的方法分享


摘要:
下文讲述数据转换带来的负面影响


CONVERT_IMPLICIT 简介及说明

CONVERT_IMPLICIT出现的场景:
当SQL Server在WHERE子句或JOIN子句中遇到两个不同数据类型的比较时,涉及类型转换时,
此操作会占用大量的CPU,IO及内存.
————————————–
CONVERT带来的影响
当查询时,遇到CONVERT转换函数时,通常它会占用比正常情况更多的资源。CPU,IO和内存的使用率很高。此外,如果转换发生在表的列上,那么该列的所有值都将转换为新的数据类型,这将使​​查询的速度与表的大小成比例。
如果在列上查询时,使用convert类型转换函数,则此列上的索引失效。



避免convert转换出现警告

方法1:
进行 where join操作时,确保条件两边的列具有相同的数据类型。

CREATE TABLE test(keyId int,info  VARCHAR(88))
GO
INSERT INTO test (keyId, info)
SELECT 1, 'info'
UNION ALL
SELECT 2, 'test'
UNION ALL
SELECT 3, 'maomao365.com'
GO 
SELECT * FROM test WHERE keyId = N'1' AND info = N'maomao365.com'
GO

---上文的查询: keyId是INT,info是VARCHAR。需要将变量前面的N删除,避免右边的数据类型变为nvarchar,如下所示
SELECT * FROM test
WHERE keyId = 1 AND info = 'maomao365.com'
GO
truncate table test
drop table test 
mssql_sqlserver_CONVERT_IMPLICIT警告-1

mssql_sqlserver_CONVERT_IMPLICIT警告-1