现在有四个大表关联查询:
SELECT base.POLICY_NO policyNo
  FROM T_POLICY_BASE    base,
       T_POLICY_VEHICLE a,
       t_vehicle        vehicle,
       t_policy_pricing pricing
 where base.policy_id = a.policy_id
   and a.target_id = vehicle.vehicle_id
   and pricing.policy_id = base.policy_id
   and base.AGENT_CODE is not null
如果,认为这四个表数据量很大很大,
有什么方法来优化么。注:不一定要在一个SQL语句中查询;我们在考虑几个表分开查义过滤。现行:oracle直接关联查询
  1、开销集中在关联中分开查:
  1、每个表要全部扫描,不如现行中只全部扫一张表,其他都是用索引
  2、数据全部读到内存,再行过滤,效率比在数据库中关联高么?
  3、数据库中直接关联,上限有多大?效率在什么时候会出现瓶颈

解决方案 »

  1.   

    ORACLE版本?
    连接字段是否有索引?
      

  2.   

    你可以看看,能不能先进行过滤,然后尽量用小表关联大表、
    或者可以试试使用hash 关联
    再不行就对这四个表做分析(analyze),这样ORACLE会自动做基于消耗的优化!
      

  3.   

    1、关联字段建索引
    2、11g环境的话,可以通过result_cache将表数据,或者经过过滤的固定结果读到缓存中,重复查询会很快。
      

  4.   

    SELECT base.POLICY_NO policyNo
    FROM T_POLICY_BASE base
    WHERE base.AGENT_CODE is not null
      and exists(select 1 from T_POLICY_VEHICLE a,t_vehicle vehicle,t_policy_pricing pricing
                  where a.policy_id = base.policy_id
                    and a.target_id = vehicle.vehicle_id 
                    and pricing.policy_id = base.policy_id
    )
      

  5.   

    这类问题,增加冗余呗
    Base一看就是个配置的表
    配置随时可以改
    实例话出来的东西还能随着配置改就有问题了.