请教一个困扰我两天的问题。假如有两个sql文sql1select a1,a2,a3, a44from awhere id in (1000个) or id in ( 1000个 ) ……..select中共取得44列数据,where中共10000个id
sql2select a1,a2,a3, a44  a60from awhere id in (1000个) or id in ( 1000个 ) ……..select中共取得60列数据,where中共10000个id
这两个sql文的返回结果分别是 44*10000 的方阵
以及 60*10000 的方阵a表的id字段有主键唯一索引困惑:为什么在sqlplus中分析sql1比sql2执行时间短,
而在java中用statement.executeUpdate(sql)执行结果却是
sql2比sql执行时间短呢?各位有无思路及建议之处

解决方案 »

  1.   

    如果是sqlplus里面解决那个时间短,JAVA里面有没有并发情况?
      

  2.   

    没有很是奇怪。比如 
    1,select 20列 from a where id in (10001 ~ 20000)
    2,select 40列 from a where id in (20001 ~ 30000)
    3,select 60列 from a where id in (30001 ~ 40000)
    4,select 80列 from a where id in (40001 ~ 50000)sqlplus中执行时间
    1<2<3<4java中执行时间
    1<3<2<4求解!
      

  3.   

    看下执行计划,
    索引是什么索引类型?B-TREE?
    记得索引值越大效率越低,好像有个这么的论证
      

  4.   


    在sqlplus的执行计划里头,在where条件一样时,返回的字段越多,它的执行时间就越长.由于本人对executeUpdate不是很了解,将该方法贴一下:
    java中用statement.executeUpdate(sql)
    方法executeUpdate
        用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或 DELETE 语句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一个整数,指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
        使用executeUpdate方法是因为在 createTableCoffees 中的 SQL 语句是 DDL (数据定义语言)语句。创建表,改变表,删除表都是 DDL 语句的例子,要用 executeUpdate 方法来执行。你也可以从它的名字里看出,方法 executeUpdate 也被用于执行更新表 SQL 语句。实际上,相对于创建表来说,executeUpdate 用于更新表的时间更多,因为表只需要创建一次,但经常被更新。~~~关注一下!!
      

  5.   

    写错了 
    java里用得时executeQuery(sql)义务上不涉及对db的更新,删除操作只是查询效率问题
      

  6.   

    sql文?
    这么别扭的说法是日本人的习惯?
      

  7.   

    执行计划的时间是正常的,
    关键是java里执行时间比较奇怪
      

  8.   

    一般直接叫sql或者sql语句。
    sql文这种叫法貌似在对日外包的招聘中见的比较多-_-!