【问题标题】:SQL Joins in SybaseSybase 中的 SQL 连接
【发布时间】:2013-09-09 23:00:17
【问题描述】:

我有一个名为 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 领域非常陌生。

提前谢谢你, 问候,

标清

【问题讨论】:

    标签: sql sybase


    【解决方案1】:

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

    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
    

    【讨论】:

    • 感谢您的帮助,D 斯坦利。您能否举例说明如何在查询中使用索引?还是我在 SPOT_VIEWED_DURATION - SPOT_DURATION 上创建索引然后运行查询?
    • 只需创建索引 - 您不需要在查询中引用索引。
    • 再次感谢。像下面这样的东西?在 mc_spot_customer_viewing_capped_thin4(spot_duration - spot_viewed_duration) 上创建 hg 索引 idx_hg
    • @user1950075 index hg 是 sybase-iq 索引。您使用的是 sybase-ase、sybase-asa 还是 sybase-iq
    • @user1950075 这样你就可以像上面所说的那样创建一个索引;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2020-04-28
    • 2012-03-13
    相关资源
    最近更新 更多