我在sybase表上创建了一个功能索引.
create index acadress_codpost_lower on acadress(LOWER(l5_codpost))
Run Code Online (Sandbox Code Playgroud)
然后我运行一个使用索引的复杂查询.没有索引需要17.086秒.索引需要0.076秒.
我从两个不同的SQL客户端以及开发和预生成的Sybase服务器上运行它.在所有情况下,我都看到了索引的加速度.
但是当我们从Java运行一个相同的查询时(我知道它是相同的,因为我已经记录了生成的SQL并直接在SQL客户端中使用它),那么性能与我们添加索引之前完全相同.
从ACE和SQuirreL运行而不是从Java运行时,相同的SQL查询可能有什么原因可以使用索引?
我的第一个想法是,Sybase可能正在缓存Prepared Statements的执行计划,而不是使用索引.我们已经尝试多次重启Java服务器(其他服务使用Sybase服务器因此更难反弹)并且没有任何区别.
另一种可能性是我们使用的是非常旧版本的Sybase驱动程序:
jConnect (TM) for JDBC(TM)/7.00(Build 26502)/P/EBF17993/JDK16/Thu Jun 3 3:09:09 2010
Run Code Online (Sandbox Code Playgroud)
此版本的JConnect可能不支持功能索引吗?
有谁知道这些理论中的任何一个是否正确,或者是否还有其他我错过的东西?