С Hibernate и MS SQL Server производительность снижается - PullRequest
3 голосов
/ 01 июля 2011

Я использую Hibernate и DB является sqlserver.SQL Server различает типы данных, поддерживающие Unicode, от тех, которые просто поддерживают ASCII.Например, символьными типами данных, поддерживающими Unicode, являются nchar, nvarchar, longnvarchar, где в качестве счетчиков ASCII используются char, varchar и longvarchar соответственно.По умолчанию все драйверы JDBC от Microsoft отправляют строки в формате Unicode на SQL Server, независимо от того, поддерживает ли тип данных соответствующего столбца, определенного в SQL Server, Unicode или нет.В случае, когда типы данных столбцов поддерживают Unicode, все гладко.Но в тех случаях, когда типы данных столбцов не поддерживают Unicode, возникают серьезные проблемы с производительностью, особенно во время выборки данных.SQL Server пытается преобразовать типы данных, отличные от Юникода в таблице, в типы данных Юникод перед выполнением сравнения.Более того, если для столбца не в Юникоде существует индекс, он будет проигнорирован.В конечном итоге это приведет к сканированию всей таблицы во время выборки данных, что существенно замедлит поисковые запросы.

Решение, которое мы использовали, заключалось в том, что мы пришли к выводу, что существует свойство sendStringParametersAsUnicode, которое помогает избавиться от этого преобразования в юникод.Это свойство по умолчанию имеет значение true, что заставляет драйвер JDBC отправлять каждую строку в формате Unicode в базу данных по умолчанию.Мы отключили это свойство.

У меня вопрос, теперь мы не можем отправлять данные в преобразовании в Юникод.в будущем, если столбец db varchar изменяется на nvarchar (только один столбец, а не все столбцы varchar), теперь мы должны отправить строку в формате Юникод.

Пожалуйста, предложите мне, как справиться со сценарием.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 12 мая 2015

Вам необходимо указать свойство: sendStringParametersAsUnicode = false в URL-адресе строки подключения.

jdbc:sqlserver://localhost:1433;databaseName=mydb;sendStringParametersAsUnicode=false
0 голосов
/ 01 июля 2011

Unicode - это собственное строковое представление для связи с SQL Server. Если вы конвертируете в MBCS (многобайтовые наборы символов), то вы делаете 2 конвертации для каждой строки. Я полагаю, что если вы обеспокоены производительностью, используйте все Unicode вместо всех MBCS

ref: http://social.msdn.microsoft.com/Forums/en/sqldataaccess/thread/249c629f-b8f2-4a8a-91e8-aad0d83919ca

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...