簡體   English   中英

hibernate 和 MS sql 服務器的性能很慢

[英]performance is slow with hibernate and MS sql server

我正在使用 hibernate 和 db 是 sqlserver。 SQL 服務器將支持 Unicode 的數據類型與僅支持 ASCII 的數據類型區分開來。 例如,支持 Unicode 的字符數據類型是 nchar、nvarchar、longnvarchar,其中它們的 ASCII 計數器部分分別是 char、varchar 和 longvarchar。 By default, all Microsoft's JDBC drivers send the strings in Unicode format to the SQL Server, irrespective of whether the datatype of the corresponding column defined in the SQL Server supports Unicode or not. 在列的數據類型支持Unicode的情況下,一切順利。 但是,如果列的數據類型不支持 Unicode,則會出現嚴重的性能問題,尤其是在數據提取期間。 SQL 服務器在進行比較之前嘗試將表中的非 unicode 數據類型轉換為 unicode 數據類型。 此外,如果非 unicode 列上存在索引,它將被忽略。 這最終會導致在數據提取期間進行全表掃描,從而大大減慢搜索查詢的速度。

我們使用的解決方案是,我們發現有一個名為 sendStringParametersAsUnicode 的屬性有助於擺脫這種 unicode 轉換。 此屬性默認為“true”,這使得 JDBC 驅動程序默認將 Unicode 格式的每個字符串發送到數據庫。 我們關閉了這個屬性。

我的問題是現在我們無法在 unicode 轉換中發送數據。 將來如果 varchar 的 db 列更改為 nvarchar(只有一列而不是所有 varchar 列),現在我們應該以 unicode 格式發送字符串。

請建議我如何處理這種情況。

謝謝。

您需要在連接字符串 url 中指定屬性:sendStringParametersAsUnicode=false。

jdbc:sqlserver://localhost:1433;databaseName=mydb;sendStringParametersAsUnicode=false

Unicode 是用於與 SQL 服務器通信的本機字符串表示形式,如果您要轉換為 MBCS(多字節字符集),那么您將對每個字符串進行 2 次轉換。 我建議如果您關心性能,請使用所有 Unicode 而不是所有 MBCS

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM