因此,我正在处理优化以下查询的问题--我已经从我的角度对它进行了充分的优化--这能进一步优化吗?
select distinct name ad_type
from dim_ad_type x where exists ( select 1
from sum_adserver_dimensions sum
left join dim_ad_tag_map on dim_ad_tag_map.id=sum.ad_tag_map_id and dim_ad_tag_map.client_id=sum.client_id
left join dim_site on dim_site.id = dim_ad_tag_map.site_id
left join dim_geo on dim_geo.id = sum.geo_id
left join dim_region on dim_region.id=dim_geo.region_id
left join dim_device_category on dim_device_category.id=sum.device_category_id
left join dim_ad_unit on dim_ad_unit.id=dim_ad_tag_map.ad_unit_id
left join dim_monetization_channel on dim_monetization_channel.id=dim_ad_tag_map.monetization_channel_id
left join dim_os on dim_os.id = sum.os_id
left join dim_ad_type on dim_ad_type.id = dim_ad_tag_map.ad_type_id
left join dim_integration_type on dim_integration_type.id = dim_ad_tag_map.integration_type_id
where sum.client_id = 50
and dim_ad_type.id=x.id
)
order by 1
发布于 2022-10-20 14:25:53
您的查询虽然加入了ok,但总体上是一个臃肿。您在外部使用dim_ad_type表,只是为了确保它也存在于内部。你还有所有那些与最终结果无关的连接,它们为什么会出现在那里呢?我会通过颠倒逻辑来简化。通过跟踪相同dim_ad_type表的内部查询,我发现下面是直接行。sum -> dim_ad_tag_map -> dim_ad_type.就这么办吧。
select distinct
dat.name Ad_Type
from
sum_adserver_dimensions sum
join dim_ad_tag_map tm
on sum.ad_tag_map_id = tm.id
and sum.client_id = tm.client_id
join dim_ad_type dat
on tm.ad_type_id = dat.id
where
sum.client_id = 50
order by
1
您的查询运行了所有的dim_ad_types,然后查找所有的和以找到匹配的。从一个客户端开始直接运行它,然后使用联接直接运行它。
https://stackoverflow.com/questions/74138535
复制相似问题