本帖最后由 hwhtj 于 2014-05-20 10:49:21 编辑

解决方案 »

  1.   

    in里面的条件是来自于那个只有身份证号的datagridview么
    你数据库中的明细表的身份证号字段是否有索引呢?
      

  2.   


    对,in 里面的条件来自于那个只有身份证号的datagridview数据库中没有身份证号的索引,而且无法添加索引
      

  3.   

    写个存储过程,把前台ID用,号串起来一起作为参数传过去,在Oracle里建立一个单列临时表,然后用这个临时表与主表作左联接查询。
    这样速度会快些。
      

  4.   


    对,in 里面的条件来自于那个只有身份证号的datagridview数据库中没有身份证号的索引,而且无法添加索引
    用CTE吧,外查询没有索引的话,用IN肯定慢了
    你把datagridview中的身份证号拼接字符串时,可以拼接为CTE的模式
    最后效果可以这样:
    with RoleNumT as
    (
    select '12321312' as rolenum
    union all
    select '12324134' 
    union all
    select '12324123' ...
    )
    select  * from tb  t where exists(select 1 from RoleNumT  ct  where t.rolenum=ct.rolenum);
      

  5.   

    身份证那个字段加个index吧。
      

  6.   

    注意:datagridview不是只有绑定数据源才能够显示数据的分步获取数据(可以是几百条,也可以是几千条),然后用进行
    for....
    datagridview.Rows.Add(...)