1

查询一:Select * from table where fieldname = 'abc'

查询 2:Select * from table where fieldname = 'XY�'

  • 我的查询 1 在 150 毫秒内执行
  • 我的查询 2 在 5000 毫秒内执行

两者都返回零结果(abc并且XY�在数据库中不存在)。

一旦我运行查询 2,然后重新运行我的查询 1,如果查询 1 在同一会话中运行,它就会开始花费更长的时间(大约 2000 毫秒而不是之前的 150 毫秒)

我的字段名已编入索引(非聚集索引)。

我正在使用 Adaptive Server Enterprise/12.5.4

我试图为两者制定一个演出计划。两者都显示相同的结果。

我的担心:

  1. 为什么非 ascii 字符的查询需要更多时间?这与索引有关吗?
  2. 运行查询 2 不应影响我的查询 1 响应时间。有什么办法可以解决这个问题?

谢谢

4

1 回答 1

1

我发现我的问题有问题。TIBCO EMS 对 unicode 字符(非 ascii)进行了一些更改,这导致 sybase 中的查询计划更改为某些未优化的查询计划。在 Java 查询计划中使用准备好的语句时,会缓存查询计划,因此所有未来的查询都会变慢。

于 2011-12-28T20:23:19.637 回答