0

我有一个名为 mc_spot_customer_viewing_capped_thin4 的表,其中有 533,523,823 行查看数据。现在我要为每个客户添加一些分析属性。我正在运行以下代码:

SELECT A.*
,b.cb_key_household
,b.viewing_panel_id
,b.mirror_men
,b.mirror_women
,b.mirror_has_children
,b.demographic
,b.financial_outlook
,b.h_affluence
,b.homeowner
,b.h_lifestage
,b.region
,b.sky_go_reg
,b.value_segment
,b.sports_downgrade
,b.movies_downgrade
,b.household_composition
,b.current_package
,b.tenure
,b.social_class
,b.TV_PREMIUMS
,b.TV_PACKAGE
,b.TENURE_IN_MONTHS
,b.DOWNLOADS_CAMPAIGN_PERIOD
,b.ON_DEMAND_CAMPAIGN_PERIOD_FLAG
,b.MOSAIC_GROUP
,b.FINANCIAL_STRATEGY_SEGMENT
,b.ENGAGEMENT_SEGMENT
,b.PANELISTS_THAT_VIEWED_SPOTS
,b.NEW_SKY_GO_USERS
,b.SKY_GO_USERS_BEFORE_CAMPAIGN
,b.SKY_GO_USER_TYPE_BEFORE_CAMPAIGN
INTO #FINAL_ALL_SPOTS_PROFILE
FROM (SELECT * FROM mc_spot_customer_viewing_capped_thin4 WHERE SPOT_VIEWED_DURATION = SPOT_DURATION) AS A
LEFT JOIN PROFILING_LOOKUP_TABLE_V9 AS B
ON A.ACCOUNT_NUMBER = B.ACCOUNT_NUMBER

这需要很长时间才能运行。是否有更优化的方式可以让我运行代码以更快地获得输出。请建议,我对 SQL 领域非常陌生。

预先感谢您, 问候,

标清

4

1 回答 1

2

我不知道它是否会改变性能,但您可以删除子查询:

SELECT A.*
...
INTO #FINAL_ALL_SPOTS_PROFILE
FROM mc_spot_customer_viewing_capped_thin4 AS A
LEFT JOIN PROFILING_LOOKUP_TABLE_V9 AS B
ON A.ACCOUNT_NUMBER = B.ACCOUNT_NUMBER
WHERE A.SPOT_VIEWED_DURATION = A.SPOT_DURATION

您可能还想在SPOT_VIEWED_DURATION = SPOT_DURATION

另一种选择是:

FROM mc_spot_customer_viewing_capped_thin4 AS A
LEFT JOIN PROFILING_LOOKUP_TABLE_V9 AS B
ON A.ACCOUNT_NUMBER = B.ACCOUNT_NUMBER
WHERE A.SPOT_VIEWED_DURATION - A.SPOT_DURATION = 0

有一个索引SPOT_VIEWED_DURATION - SPOT_DURATION

这两个在你的情况下是等价的,但是在你想要一个范围内的差异的情况下,第二个会更快,例如

WHERE A.SPOT_VIEWED_DURATION - A.SPOT_DURATION BETWEEN -1 AND 1
于 2013-09-09T14:44:47.287 回答