有一个语句如下:
Select DISTINCT (CN_MATERIAL) As Val From T_PRODUCT b,T_SUB_PRODUCT a Where a.CN_ID=b.CN_ID And CN_PRODUCT_TYPE='AAA'执行出结果要5分钟,请问各位高手有什么办法提高效率CN_MATERIAL 是 T_SUB_PRODUCT 的一个字段
CN_PRODUCT_TYPE 是 T_PRODUCT 的一个字段 T_PRODUCT >= T_SUB_PRODUCT , T_PRODUCT 中有且只有一条记录与 T_SUB_PRODUCT 中对应 T_PRODUCT 和 T_SUB_PRODUCT  两张表的数量级均在百万条记录

解决方案 »

  1.   

    select distinct CN_MATERIAL from T_SUB_PRODUCT b where exists(select 1 from T_PRODUCT where CN_PRODUCT_TYPE='AAA' and CN_ID=b.CN_ID)
      

  2.   

    百万级的数据量CN_MATERIAL、CN_PRODUCT_TYPE是否加索引
      

  3.   

    回复2楼的 caoleione:按照你的方式改了,但是效率还是很慢,如果把distinct  去掉,在20秒内能有结果。 请问有其他的过滤方式吗?
      

  4.   

    在explain plan window中执行一下你的sql,看看时间主要消耗在什么地方
      

  5.   

    如果
    select CN_MATERIAL from T_SUB_PRODUCT b where exists(select 1 from T_PRODUCT where CN_PRODUCT_TYPE='AAA' and CN_ID=b.CN_ID)语句结果集非常大的话,建议使用如下方式
    select *  from tbl a
     where rowid not in (select max(b.rowid)
                           from tbl b
                          where a.col1 = b.col1
                            and a.col2 = b.col2);
    并配合使用with语句