Java hibernate和MS sql server的性能较慢

Java hibernate和MS sql server的性能较慢,java,hibernate,Java,Hibernate,我使用的是hibernate,db是sqlserver。 SQLServer将支持Unicode的数据类型与仅支持ASCII的数据类型区分开来。例如,支持Unicode的字符数据类型是nchar、nvarchar、longnvarchar,其中ASCII计数器部分分别是char、varchar和longvarchar。默认情况下,所有Microsoft的JDBC驱动程序都将Unicode格式的字符串发送到SQL Server,而不管SQL Server中定义的相应列的数据类型是否支持Unicod

我使用的是hibernate,db是sqlserver。 SQLServer将支持Unicode的数据类型与仅支持ASCII的数据类型区分开来。例如,支持Unicode的字符数据类型是nchar、nvarchar、longnvarchar,其中ASCII计数器部分分别是char、varchar和longvarchar。默认情况下,所有Microsoft的JDBC驱动程序都将Unicode格式的字符串发送到SQL Server,而不管SQL Server中定义的相应列的数据类型是否支持Unicode。在列的数据类型支持Unicode的情况下,一切都很顺利。但是,在列的数据类型不支持Unicode的情况下,会出现严重的性能问题,尤其是在数据获取期间。SQL Server尝试在进行比较之前将表中的非unicode数据类型转换为unicode数据类型。此外,如果非unicode列上存在索引,则将忽略该索引。这最终会导致在数据获取期间进行整个表扫描,从而大大降低搜索查询的速度

我们使用的解决方案是,我们发现有一个名为sendStringParametersAsUnicode的属性,它有助于消除这种unicode转换。此属性默认为“true”,这使得JDBC驱动程序在默认情况下以Unicode格式将每个字符串发送到数据库。我们关闭了这家酒店

我的问题是现在我们不能用unicode转换发送数据。将来,如果varchar的db列更改为nvarchar(只有一列而不是所有varchar列),那么现在我们应该以unicode格式发送字符串

请告诉我如何处理这种情况


谢谢。

Unicode是用于与SQL Server通信的本机字符串表示形式,如果要转换为MBCS(多字节字符集),则每个字符串要进行2次转换。我建议,如果您关心性能,请使用所有Unicode而不是所有MBC


ref:

您需要在连接字符串url中指定属性:sendStringParametersAsUnicode=false

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

你好,阿南莎·夏玛,谢谢你的回复。该链接没有任何内容,如果您有任何其他链接或信息,请与我共享。