以下是我的SQL语句,表上的数据量有40多万。
SELECT SUM (T032_FORM_SU)  FROM T029_FORWARD_SIJI T029 INNER JOIN T032_FORWARD_SIJIM ON
  T029_WAREH_CD = T032_WAREH_CD
  AND T029_OWNER_CD = T032_OWNER_CD 
  AND T029_SHIPMENT_ID = T032_SHIPMENT_ID
  AND T032_TRAN_KBN < '3'
 WHERE
  T029_WAREH_CD = ?
  AND T029_OWNER_CD = ?
  AND T029_SLIP_KBN <> '4'
  AND T029_SLIP_KBN <> '5'
  AND T029_SLIP_KBN <> '9'
  AND T029_SHIPMENT_KBN = '01' AND T029.T029_TRAN_KBN < '3'
通过jdbc动态绑定参数执行要10多秒才能完成,但是如果在plsql中执行,条件直接付值,也就是0.1秒左右就好了。不知道这是什么问题,而且通过jdbc执行时,如果不动态绑定参数,直接付值的话也非常快,就是一动态绑定参数,就慢了,这是什么原因。
t029是主表,t032是明细表。  这两个表都建有索引。

解决方案 »

  1.   

    是不是你java端的 參數  計算的慢啊 除了jdbc的連接時間   應該不會有其他的差別了
      

  2.   

    我也想不同,参数不用什么计算,直接是从前台传过来的值。但就是特别的慢,如果不动态绑定,直接在sql中把值付好,执行就非常的快。
      

  3.   

    通过jdbc的方式,获得连接需要时间,读取sql语句到connect中需要时间,设置参数需要时间,这样不就10s啦
    很正常
      

  4.   

    楼上这种说法不对呀,不可能这么慢的,我用irontrack sql跟踪了一下,要用12秒多,其中参数付值和取结果用的时间最少,最多的就是sql执行时间,能占总时间的99%
      

  5.   

    是否你的两个问号得数据列存在类型转换?比如你字段本来是number,而你程序中却用了setString,类型转换用了to_number函数,它就不会用你的索引了
    以前碰到过这个问题,也不知道说的对不对。关注~~~
      

  6.   

    用JDBC分析时,返回的全部的查询结果
    而用PL/SQL返回的结果只是前几条记录。