查出来有很多'编号',少则几百,多则数千,
然后在info表中查询编号对应的记录,info表有140W左右的数据,
用in('编号'),由于编号多,拆成了n个in条件,速度太慢,好像不能查出来,
如果考虑用中间表,先把编号插入中间表,然后关联,同步又该怎么处理呢

解决方案 »

  1.   

    用in('编号'),由于编号多,拆成了n个in条件,速度太慢,好像不能查出来,可以用EXISITS来代替。。
    IN效率是很低的。建议你把你SQL贴出来,优化
      

  2.   

    info表 的 编号 有索引么?EXISITS  实现这个应该不行吧
      

  3.   

    就是这样的:mipid in ('..','..',..) and mipid in ('..','..',..) and ...,每个in里最多有998个参数
      

  4.   

    用查出“编号”的查询坐子表,直接和info表等值连接(如果需要保留全部选出的“编号,可以考虑左联接)
    不需要用到in,如果不是必须,也最好不要用exists。
    如果你选出的“编号”在info里面都有,最好用等值连接。
    这样效率会高些,也便于你以后的优化。
      

  5.   


    我的想法是:如果没办法简化你的递归  可以用临时表 GLOBAL TEMPORARY TABLE
    至于你说的同步问题,如果你是放到一个function里面,那其实同步应该不算是个问题
      

  6.   

    用in的查询效率太低了,我的想法是设计一个中间表,然后把递归的“编号”存到中间表,然后用关联查询where 中间表.id = info.id 这样效率会高很多。
      

  7.   

    谢谢大家的支持,问题已经解决了,我把java写的递归,改为oracle递归,然后关联查询就好了,中间表那个办法我没有试,不过使用oracle递归速度还可以