0

我在使用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的選項。

我認爲這些是我的選擇。你認爲哪一個更好?

  1. 嘗試反向工程當您使用 cfqueryparam但指定正確的數據類型是什麼ColdFusion的是做(用sp_prepexec?)
  2. 刪除使用cfqueryparam的全部,只是 驗證字符串是有效的UUID之前硬編碼它到查詢 (例如[uuid] ='#attributes.uuid#'),但是恐怕我會失去可見性,將此查詢的所有執行視爲在Azure SQL Performance Insight工具中分組在一起
+0

您是如何確定您的關於ColdFusion如何發送參數的聲明的? –

+0

從這個答案 - https://stackoverflow.com/questions/10802388/what-are-the-details-for-using-cf-sql-nvarchar-in-coldfusion-10/10848136#10848136 – jessieloo

+1

你相信轉換到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' –

回答

0

非常感謝@BernhardDöblerfor comm使用我需要的參數來糾正數據源總是以Unicode編碼參數的問題。需要添加到JDBC URL的參數是sendStringParametersAsUnicode = false(具有諷刺意味的是,我首先從他的評論中複製了它並將其添加到設置中,但它沒有工作,因爲在幾個字母之間嵌入了一些奇怪的字符。) DTU消耗量的變化現在顯着降低!見下面的截圖。 DTU consumption Performance Insight