我在使用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' –