jdbc连接数据库做查询。我的SQL是这样的
String sql = select * FROM AAT where airlinetype =1 and sourece>1  
union select * FROM ACX where airlinetype =1 and sourece>1 
union select * FROM AEB where airlinetype =1 and sourece>1 
union select * FROM AKA where airlinetype =1 and sourece>1 
...........
一共连接了100多个吧。他们的结构都一样。这样返回的数据一共有10多W条吧。在java代码我执行到ResultSet rs =st.executeQuery(sql);速度缓慢,查询结果不能显示。请问大家如何解决啊?1.分页吗?很多张表相连,怎么分页?没弄过,大家指导一下啊?2.通过statement.setMaxRows()来限制返回行数的数量。如果这里我设置返回5000条,那后面的那样数据怎么得到?不太会用statement.setMaxRows()求救了,大家帮帮忙啊?或者是其他的思路。

解决方案 »

  1.   

    问题不在jdbc,你sql的问题,该做查询优化
      

  2.   

    我的sql如何优化呢?  建立索引吗?在那个字段上建索引? 希望大家指导一下
      

  3.   

    airlinetype 上建立索引比较好吧
      

  4.   

    你看下http://blog.csdn.net/gl74gs48/archive/2010/12/24/6097130.aspx或许有帮助
      

  5.   

    union 的性能很低 更何况你用和很多次
    select * 的效率也是很低的 
    你从这两个方面先优化试试
    JDBC数据库分页首先要看你是什么数据库 网上例子很多
      

  6.   

    多表连接的分页的例子我没找到啊,我用的是sqlserver。
      

  7.   

    谁帮帮忙啊?譬如我的如何优化?sql只能写成那样啊
      

  8.   

    建议优化sql语句,这种很复杂的先做成试图,在用jdbc
      

  9.   

    对于复杂的数据查询还是 建视图吧  当然 优化sql 也是必须的  或者 数据量大 就分成多个表  当然这是需要符合你的需求
      

  10.   

    select * from (
    select * FROM AAT 
    union select * FROM ACX
    union select * FROM AEB
    union select * FROM AKA
    union 100多个继续...
    ) t where t.airlinetype = 1 and t.sourece>1 
    可以将该段SQL建立视图。
      

  11.   

    使用临时表,将查询用批量的方式插入临时表,再对临时表做数据读取操作不要用union方式,极其影响性能
      

  12.   

    --先客气一句,大家新年好!
    我认为fzdxwhl2007 的想法可行,使用临时表,
    先将这些表中的数据都放到一个临时表中,(注意插入时最好用批量插入,这样快)
    并对相关条件涉及到的列设置索引。
    最后查询这张临时表。
    sqlserver 中分页使用的语句是
    select * from (
      select top n * from(
        select top n + skip * 
        from table
        order by sort_col desc
      )
      order by sort_col asc
    )
    as any_name
    order by sort_col desc;
    不可以去掉这个排序的子句,这段sql 是从书上找的。
    top表示要查询的条数,top + skip表示要查询的那一段数据:
    如: 总共查询出来了 200条(top+skip)
    但你只要180-200 这20条数据, 那么top就是20,
    具体思路是: 先查询前200条,再反向排序将要的20条弄到最前面,
    然后从200条,选出前20条,就是正常顺序的第180-200这20条数据了。
    (老实说:我没用过sql server 的sql,但上面的思路绝对没问题)
    希望能帮到你.
      

  13.   

    10w条必须加索引,按平常搜索法,你就等着慢慢查吧。
    把里面的 * 都换成具体的列名,这个影响速度,用 * 时数据库需要经过转换,更别说那么多 * 。
    sql语句,要么都大写要么都小写,大小写很影响查询效率,每次数据库都要重新编译。
    较频繁查询,建议用同义词。