让JTDS驱动程序接受sendStringParametersAsUnicode = false的问题?

jav*_*ase 6 java sql-server hibernate jtds sqljdbc

从我的所有应用程序使用net.sourceforge.jtds.jdbc.Driver作为我的MSSQL驱动程序.我在准备好的语句中遇到了性能问题,并了解到sendStringParametersAsUnicode = false应该可以解决问题.不幸的是,我似乎无法让司机接受这个价值.我可以得到Microsoft驱动程序com.microsoft.sqlserver.jdbc.SQLServerDriver接受参数就好了:

jdbc:sqlserver://servername:1433;databaseName=dbname;sendStringParametersAsUnicode=false
Run Code Online (Sandbox Code Playgroud)

在persistence.xml和我的ds.xml中工作.准备好的陈述很快就会在22秒内完成.

但是,我似乎无法从JTDS获得相同的性能提升.它仍然围绕着准备好的语句,每次迭代需要几秒钟.

我在字符串上尝试了几种变体,并且在我的测试中看到了相同的延迟(使用Hibernate.connection.url的persistence.xml)和使用JTA和ds.xml的服务器.

jdbc:jtds:sqlserver://server:1433/dbname;sendStringParametersAsUnicode=false

jdbc:jtds:sqlserver://server:1433;sendStringParametersAsUnicode=false;databaseName=dbname

jdbc:jtds:sqlserver://server:1433;sendStringParametersAsUnicode=false;selectMethod=cursor;socketKeepAlive=true;databaseName=dbname
Run Code Online (Sandbox Code Playgroud)

我读过的所有内容都表明Microsoft驱动程序速度较慢,而且我的公司过去也遇到过问题.如果可能的话,我真的很想使用JTDS,但是不能等待准备好的声明10秒!

有人有什么想法吗?

谢谢

Jon*_*eet 2

状态的文档sendStringParametersAsUnicode

确定字符串参数是以 Unicode 还是以数据库的默认字符编码发送到 SQL Server 数据库。这严重影响了 SQL Server 2000 的性能,因为它不会自动转换类型(如 7.0 那样),这意味着如果索引列是 Unicode 并且使用默认字符编码(或其他方式)提交字符串,SQLServer 将执行索引扫描而不是索引查找。对于 Sybase,确定无法在服务器字符集中编码的字符串是否作为 unicode 字符串发送。编码逻辑会影响性能,因此如果未使用 unitext 或 univarchar 数据类型或者字符集为 utf-8,请将此选项设置为 false。

因此,如果将它包含在您的查询中会使您的性能变差,则表明它适合您的查询,并且您所看到的正是文档警告的问题。

如果您看到MS 驱动程序中的性能提升,则这sendStringParametersAsUnicode在 JTDS 上的含义可能与 MS 驱动程序上的含义略有不同。

使用和不使用该选项时每个驱动程序的性能如何?您使用什么版本的 SQL Server?您的查询分析器为这些查询显示什么?您的查询是什么以及涉及的字段类型是什么?