Query

SELECT 
    fact.campaign_id campaign_id,
    fact.target_id target_id,
    fact.ams_profile_id ams_profile_id,
    fact.ad_group_name ad_group_name,
    fact.ad_group_id ad_group_id,
    fact.targeting_text targeting_text,
    dim.startDate AS campaign_start_date,
    fact.campaign_name campaign_name,
    fact.query query,
    fact.targeting_type targeting_type,
    fact.ad_type ad_type,
    fact.country country,
    SUM(attributed_sales1d) AS sales1d,
    SUM(attributed_sales7d) AS sales7d,
    SUM(attributed_sales14d) AS sales14d,
    SUM(attributed_sales30d) AS sales30d,
    SUM(attributed_sales14d_same_sku) AS sales14d_same_sku,
    SUM(attributed_sales14d) - SUM(attributed_sales14d_same_sku) AS halo_sales14d,
    SUM(attributed_sales_new_to_brand14d) AS sales14d_new_to_brand,
    term.salesLast60d AS sales_last60d,
    term.salesThisWeek AS sales_this_week,
    term.salesMTD AS sales_mtd,
    term.roasLast60d AS roas_last60d,
    term.roasThisWeek AS roas_this_week,
    term.roasMTD AS roas_mtd,
    CASE term.search_frequency_rank
        WHEN 99999999 THEN NULL
        ELSE term.search_frequency_rank
    END search_frequency_rank,
    SUM(cost) AS adspend,
    ROUND((SUM(cost) / SUM(attributed_sales14d)) * 100,
            2) AS acos14d,
    ROUND(SUM(attributed_sales14d) / SUM(cost), 2) AS roas14d,
    ROUND((SUM(attributed_conversions14d) / SUM(clicks)) * 100,
            2) AS conversion14d,
    SUM(attributed_conversions14d) AS conversions14d,
    SUM(attributed_conversions14d_same_sku) AS conversions14d_same_sku,
    ROUND((SUM(clicks) / SUM(impressions)) * 100,
            2) AS ctr,
    SUM(impressions) AS impressions,
    SUM(clicks) AS clicks,
    SUM(attributed_units_ordered14d) AS orders14d,
    ROUND((SUM(cost) / SUM(clicks)), 2) AS cpc,
    ROUND(SUM(cost) / SUM(impressions), 2) AS cpi,
    dim.state campaign_status,
    CASE keyword.bid
        WHEN 0 THEN adGroup.defaultBid
        ELSE keyword.bid
    END keyword_bid,
    fact.brand brand
FROM
    fact_targets_segmented_summary_daily AS `fact`
        INNER JOIN
    dim_search_terms_v1 AS term ON term.user_id = term.user_id
        AND term.keyword_id = fact.target_id
        AND fact.query = term.search_term
        INNER JOIN
    dim_keywords_v1 AS keyword ON fact.target_id = keyword.keywordId
        AND keyword.userId = fact.user_id
        INNER JOIN
    dim_campaign_v1 AS dim ON fact.campaign_id = dim.campaignId
        AND dim.userId = fact.user_id
        INNER JOIN
    dim_adgroup_v1 AS adGroup ON keyword.adGroupId = adGroup.adGroupId
        AND keyword.userId = adGroup.userId
WHERE
    (fact.user_id = {user_id}
        AND (fact.report_type = 'keywords')
        AND (dim.state = 'enabled')
        AND (fact.country = {country})
        AND (fact.brand = {brand})
        AND fact.date BETWEEN '2022-09-18' AND '2022-10-22')
GROUP BY fact.user_id , fact.ams_profile_id , fact.campaign_id , fact.target_id , fact.query;

Tables

Name Primary Key Index Records
fact_targets_segmented_summary_daily (user_id, ams_profile_id, campaign_id, target_id, query) `key_index (ams_profile_id,campaign_id,target_id,query),
report_type_index (report_type),
date_index (date),
user_id (user_id),
campaign_id (campaign_id),
targeting_text (targeting_text),
query_index (query)` 12273557
dim_search_terms_v1 (user_id, ams_profile_id, campaign_id, keyword_id, search_term) `keyword_id_index (keyword_id),
search_term_index (search_term),
campaign_index (campaign_id),
user_index (user_id)` 4041735
dim_keywords_v1 (userId, amsProfileId, campaignId, keywordId) `state_index (keywordId,state),
user_id (userId),
id_index (amsProfileId,keywordId),
keyword_text (keywordText)` 6031633
dim_campaign_v1 (userId, amsProfileId, campaignId) `campaign_state (campaignId,state),
user_id (userId),
id_index (amsProfileId,campaignId),
campaign_id_index (campaignId),
filter_index (userId,amsProfileId,campaignId)` 188591
dim_adgroup_v1 (userId, amsProfileId, campaignId, adGroupId) ad_group_index (adGroupId) 485912

Explain plan

ID select_type table partitions type possible_keys key key_len ref rows filtered Extra
1 SIMPLE dim ref PRIMARY,campaign_state,user_id,campaign_id_index,filter_index user_id 4 const 3601 10.00 Using where; Using temporary; Using filesort
1 SIMPLE fact ref PRIMARY,key_index,report_type_index,date_index,user_id,campaign_id,targeting_text,query_index campaign_id 16 demandhelm.dim.campaignId,const 118 0.04 Using index condition; Using where
1 SIMPLE keyword ref PRIMARY,state_index,user_id user_id 12 const,demandhelm.fact.target_id 1 100.00
1 SIMPLE adGroup ref ad_group_index ad_group_index 8 demandhelm.keyword.adGroupId 1 10.00 Using index condition
1 SIMPLE term ref keyword_id_index keyword_id_index 8 demandhelm.fact.target_id 13 100.00 Using index condition