where   tj in ('c623af:1098b9eeec9:-24d7','c623af:1098b9eeec9:6004','1478a43:10999aff49a:-6f03','c623af:1098b9eeec9:6abf'
 ,'c623af:1098b9eeec9:41c9','c623af:1098b9eeec9:41cc','c623af:1098b9eeec9:6e57','c623af:1098b9eeec9:41c6','af72d8:1066bff2970:-576b',
 'c623af:1098b9eeec9:-2505')这样的效率非常低,怎样优化一下,这条件语句写成exists很困难。

解决方案 »

  1.   

    这样好象没法优化吧 ..
    能否把sql贴出来?
      

  2.   

    select * from  table1 t  where t.column1  in('c623af:1098b9eeec9:-24d7','c623af:1098b9eeec9:6004','1478a43:10999aff49a:-6f03','c623af:1098b9eeec9:6abf'
     ,'c623af:1098b9eeec9:41c9','c623af:1098b9eeec9:41cc','c623af:1098b9eeec9:6e57','c623af:1098b9eeec9:41c6','af72d8:1066bff2970:-576b',
     'c623af:1098b9eeec9:-2505') and t.column2=1  order by t.column1,t.column2 desc
      

  3.   

    我测试过 使用 in () 非常耗费资源,非常慢,大约2s 中,如果去掉条件,速度就上来了
      

  4.   

    1、可以使用(t.column1='c623af:1098b9eeec9:-24d7' or t.column1='c623af:1098b9eeec9:6004'..)的方式,看看效率是否有所提高。2、如果数据量较大,需要对column1建索引
      

  5.   

    1.OR 方式。
    2.重新设计数据库。
     看你的字段应该属于A:B:C
     典型的一对多样式, 采用树样式。A、B、C各占一个字段,然后拼接。这样在海量数据上应该有一定提高。
     如下方式:
    c623af---〉1
    1098b9eeec9----〉2
    -6f03----〉3
    拼接成123
    WHERE ID IN (123,)
    前端传入进行处理一下。 
      

  6.   

    这个表都有些什么索引,表中有多少记录,column2=1的记录又有多少,查询出来的结果有多少?
      

  7.   

    不能改数据库---抓狂!!!那就是说索引不能建立!那这么干!select * from  table1 t  where t.column2=1
    以上作为子查,然后再从这个子查中查询。本人没有试验过。
      

  8.   

    改成exists试试呢?不知道会不会快??
    select * from  table1 t  where exists
    (select column1 from 
      (select 'c623af:1098b9eeec9:-24d7' column1 from dual
         union all
       select 'c623af:1098b9eeec9:6004' from dual
         union all
       select '1478a43:10999aff49a:-6f03' from dual
         union all
       select 'c623af:1098b9eeec9:6abf' from dual
         union all
       select 'c623af:1098b9eeec9:41c9' from dual
         union all
       select 'c623af:1098b9eeec9:41cc' from dual
         union all
       select 'c623af:1098b9eeec9:6e57' from dual
         union all
       select 'c623af:1098b9eeec9:41c6' from dual
         union all
       select 'af72d8:1066bff2970:-576b' from dual
         union all
       select 'c623af:1098b9eeec9:-2505' from dual) t2
     where t.column1=t2.column1
       and t.column2=1 ) order by t.column1,t.column2 desc
      

  9.   

    union all的速度应该比union快...
    所以先用union all试试
      

  10.   

    1 oracle课程中说明in和or的效率是一样的,只不过是写法区别而已
    2 union all 可能会导致记录数变多,不能用
    3 关键是你的t.column1要有索引,并确保能用上,才是最快的方法,检查下执行计划,索引是否正确使用上了。