【发布时间】:2022-11-11 19:17:11
【问题描述】:
因此,我正在研究优化以下查询的问题,我已经从我的角度将其优化到了最大程度,这可以进一步优化吗?
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
【问题讨论】:
-
你最好在dba.stackexchange.com上问这个问题
-
是的。不,也许。请发布架构、示例数据和 EXPLAIN 的输出。没有这些信息,我们只是猜测。
-
您需要在
dim_ad_type、dim_ad_tag_map和sum_adserver_dimensions之间有一个join(而不是left join)。其他所有表都不需要在这里。您不需要子查询。 -
子查询格式错误。
and dim_ad_type.id=x.id默默地将外连接转换为内连接。你确定你想要那个?
标签: mysql sql mysql-workbench