grails APP应用程序访问数据时发生了奇怪的问题。 有关详细信息,请使用prepared statement.executequeryvsstatement.execute query将问题分离为常规java8小程序。
研究以下片段。
//executes in milliseconds
DirectSQL='selecttop(10 ) * fromvdocumentswherecodcli=' cccc ' andserial=' SSS ' orderbyotherfielddesc;' ;
stmt=con.createStatement (;
RS=stmt.executequery(DirectSQL );
//More than 10 minutes
SQLprepared='selecttop(10 ) *来自vdocuments where cod CLI=? and serial=? ORDER BY otherField DESC;' ;
preparedstatementpstatement=con.preparestatement (SQL prepared;
pstatement.setstring(1,' CCCC ';
pstatement.setstring(2,' SSSS ';
RS prepared=p statement.execute query (;
同一查询。
数据来自于具有1,500多万条记录的SQLserver(2008年,我认为当前无法访问)的视图。 所有必需的字段都有索引,从控制台执行的同一查询(第一个查询)也非常快。
如果在没有ORDER子句的情况下运行速度较慢的预定义语句查询,则会运行得很快。
无论出于什么原因,我都清楚数据库在使用保留语句时没有使用索引进行完全扫描,但这可能是错误的,所以我对任何想法都持开放态度
我想驱动程序(sqlserver官方最新和jtds已经过测试)有数据,正在等待什么类型的EOF连接,但tcpdump检查是否在这里收到数据。
因为找不到为什么会这样,所以任何想法都很受欢迎。
先谢谢你!