我在使用ColdFusion 2016的Azure中使用数据库。我正在使用Sqljdbc41.jar(关于如何配置它的有用链接:link1link2)这是我的查询。 [uuid]有一个索引,它是varchar(36),pkIdentity是一个主键int。cfqueryparam在SQL Azure中将varchar转换为nvarchar
select pkIdentity
from tbl1
where [uuid] = <cfqueryparam cfsqltype="cf_sql_varchar" value="#attributes.uuid#" maxlength="36">
此查询消耗了Azure中最多的DTU。 ColdFusion不把它发送到Azure中为
(@P0 nvarchar(4000))select pkIdentity
from tbl1
where [uuid]= @P0
我读过的JDBC驱动程序的设置可能会casting the varchar datatype as varchar它传递到SQL Azure的时候。但是,我没有在CF数据库设置屏幕中禁用转换为nvarchar的选项。
我认为这些是我的选择。你认为哪一个更好?
- 尝试反向工程当您使用 cfqueryparam但指定正确的数据类型是什么ColdFusion的是做(用sp_prepexec?)
- 删除使用cfqueryparam的全部,只是 验证字符串是有效的UUID之前硬编码它到查询 (例如[uuid] ='#attributes.uuid#'),但是恐怕我会失去可见性,将此查询的所有执行视为在Azure SQL Performance Insight工具中分组在一起
您是如何确定您的关于ColdFusion如何发送参数的声明的? –
从这个答案 - https://stackoverflow.com/questions/10802388/what-are-the-details-for-using-cf-sql-nvarchar-in-coldfusion-10/10848136#10848136 – jessieloo
你相信转换到nvarchar降低查询速度? http://www.jochenhebbrecht.be/site/2014-05-01/java/fixing-slow-queries-running-sql-server-using-jpa-hibernate-and-jtds'jdbc:sqlserver:// localhost \ SQLEXPRESS; DatabaseName = TESTDB; sendStringParametersAsUnicode = false' –