问题:我有一个 SQL Server 表,其中有一个 varchar 列和数百万行,它已建立索引。从 SQL Server 查询工具中运行查询速度很快,因为它使用索引。当我从 Java JDBCPreparedStatement 运行查询时,需要花费很多分钟,调查显示 SQL Server 执行了表扫描。我该如何解决这个问题?
解答:该问题是由于 Java 将查询参数的 unicode 字符串传递给 SQLServer 造成的。 SQLServer 不会在 varchar 索引上使用它。
如果您希望列保留 varchar(或无法更改它)并有权访问 Java 代码,请将 sendStringParametersAsUnicode 连接字符串属性设置为“false”(默认为“true”)。搜索“JDBC 驱动程序的 MSDN 国际功能”以获取更多详细信息,但也适用于 CHAR、VARCHAR 或 LONGVARCHAR 列。
如果您无权访问 Java 代码但可以更改数据库,则将数据库中的 varchar 列更改为 nvarchar 可以解决问题,但代价是数据存储要求加倍。
EXAMPLE
jdbc:sqlserver://localhost:1433;databaseName=mydb;sendStringParametersAsUnicode=false
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)