Я использую базу данных в Azure с ColdFusion 2016. Я использую Sqljdbc41.jar из (полезные ссылки по настройке: ссылка1 ссылка2) Это мой запрос . [uuid] имеет индекс и является varchar(36), а pkIdentity является первичным ключом int.
select pkIdentity
from tbl1
where [uuid] = <cfqueryparam cfsqltype="cf_sql_varchar" value="#attributes.uuid#" maxlength="36">
Этот запрос потребляет больше всего DTU в Azure. Coldfusion отправляет его в Azure как
(@P0 nvarchar(4000))select pkIdentity
from tbl1
where [uuid]= @P0
Я читал, что настройка драйвера jdbc может быть приведением типа данных varchar к типу varchar при передаче его в Azure SQL. Однако на экране настройки базы данных CF у меня нет возможности отключить преобразование в nvarchar.
Я думаю, это мои варианты. Как вы думаете, что лучше?
- попробуйте перепроектировать, что делает coldfusion, когда вы используете cfqueryparam, но укажите правильный тип данных (используйте sp_prepexec?)
- полностью удалить использование cfqueryparam и просто проверить, что строка является допустимой uuid, прежде чем жестко кодировать ее в запросе (например, где [uuid] = '#attributes.uuid#'), но тогда я боюсь, что потеряю видимость для всех выполнений этого запроса группируется в инструменте Azure SQL Performance Insight
jdbc:sqlserver://localhost\SQLEXPRESS;DatabaseName=TESTDB;sendStringParametersAsUnicode=false
- person Bernhard Döbler   schedule 31.08.2017