当前位置: 首页 > 知识库问答 >
问题:

Sql Server忽略varchar列上的索引,并在从Java查询时进行表扫描

宣俊豪
2023-03-14

问题:我有一个SQL Server表,有一个varchar列和数百万行,它被索引。在SQL Server查询工具中运行查询很快,因为它使用索引。当我从JavaJDBCPreparedStatement运行查询时,需要花费很多分钟,调查显示SQLServer会进行表扫描。如何解决此问题?

共有1个答案

白修谨
2023-03-14

答:这个问题是由于Java将查询参数的unicode字符串传递给SQLServer造成的。SQLServer不会在varchar索引上使用它。

如果您希望该列保持varchar(或不能更改它)并有权访问Java代码,请将sendStringParameter sAsUnicode连接字符串属性设置为“false”(默认为“true”)。搜索“JDBC驱动程序的MSDN国际功能”以获取更多详细信息,但也适用于CHAR、VARCHAR或LONGVARCHAR列。

如果您没有访问Java代码的权限,但可以更改数据库,那么将数据库中的varchar列更改为nvarchar将以加倍数据存储需求为代价解决问题。

jdbc:sqlserver://localhost:1433;databaseName=mydb;sendStringParametersAsUnicode=false
 类似资料:
  • 本文向大家介绍SQLSERVER中忽略索引提示,包括了SQLSERVER中忽略索引提示的使用技巧和注意事项,需要的朋友参考一下 当我们想让某条查询语句利用某个索引的时候,我们一般会在查询语句里加索引提示,就像这样 当在生产环境里面,由于这个索引提示的原因,优化器一般不会再去考虑其他的索引,那有时候这个索引提示可能会导致查询变慢 经过你的测试,发现确实是因为这个索引提示的关系导致查询变慢,但是SQL

  • 本文向大家介绍详解sqlserver查询表索引,包括了详解sqlserver查询表索引的使用技巧和注意事项,需要的朋友参考一下 SELECT   索引名称=a.name  ,表名=c.name  ,索引字段名=d.name  ,索引字段位置=d.colid  需创建索引 例如: 根据某列判断是否有重复记录,如果该列为非主键,则创建索引 根据经常查询的列,创建索引 无须创建索引 字段内容大部分一样,

  • 问题内容: 在PostgreSQL中,我在表的日期字段上有一个索引。当我将字段与进行比较时,查询效率很高: 如果我尝试将其与负间隔进行比较,它会下坡并使用位图堆扫描。 有没有一种更有效的使用日期算术查询的方法? 问题答案: 第一个查询希望找到 ,但实际上找到。 第二个查询期望找到 并实际找到。 当然,处理23倍的行会花费更多的时间。因此,您的实际时间不足为奇。 的数据统计信息已过时。跑: 并重复您

  • 问题内容: 在这个例子中 如果JSON对象缺少属性“ age”, 有人说它不能反序列化。在反序列化期间是否有 注释 可以忽略丢失的字段? 谢谢 问题答案: 我想你想要的是 这就是Jackson 1.x的方式。我认为2.x中有一种新方法。就像是 这些将告诉Jackson仅序列化不为null的值,并且在反序列化缺少的值时不会抱怨。我认为它将只是将其设置为Java默认值。

  • 问题内容: 但是,当我删除WHERE时,查询会停止使用该键(即使我明确地强制使用该键也是如此) 有什么解决方法吗? 我意识到我在第二个示例中选择了整个表,但是为什么mysql突然决定它还是要忽略我的FORCE而不使用键?没有密钥,查询大约需要10分钟。 问题答案: FORCE有点用词不当。这是MySQL文档所说的(重点是我的): 您还可以使用FORCE INDEX,其作用与USE INDEX(in

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/安全检查/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。