现在有四个大表关联查询:
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、数据库中直接关联,上限有多大?效率在什么时候会出现瓶颈
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、数据库中直接关联,上限有多大?效率在什么时候会出现瓶颈
连接字段是否有索引?
或者可以试试使用hash 关联
再不行就对这四个表做分析(analyze),这样ORACLE会自动做基于消耗的优化!
2、11g环境的话,可以通过result_cache将表数据,或者经过过滤的固定结果读到缓存中,重复查询会很快。
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
)
Base一看就是个配置的表
配置随时可以改
实例话出来的东西还能随着配置改就有问题了.