簡體   English   中英

1.44億行表查詢SQL的性能幫助-非常慢

[英]Performance Help on 144 million row table query SQL - Very slow

我的查詢需要幫助。 該表有1.44億行,這是一個階段表(我們在其中插入另一個表的數據)。 我之前沒有索引,並且該作業已經運行了9多個小時。 我將非聚集索引添加到具有多個列(AdvertiserName,MediaPlanName,MediaPlanNumber,CreativeDescription)的該表中,因為這種組合使其具有唯一性。 但是,即使現在執行計划也顯示了表掃描,而不是非聚集索引掃描,並且性能也沒有改善。

這是下面的查詢,使用SSIS將數據匯總到csv文件中需要花費很長時間。 如何提高此查詢的性能? 請幫忙!! 運行需要很長時間。 :(

SELECT
    AdvertiserName,
    AdvertiserID,
    MediaPlanNumber,
    MediaPlanName,
    PublishingSiteName,
    SiteName,
    Week_Begin_Monday,
    CreativeDescription,
    SUM(CAST(ViewCount AS BIGINT)) ViewCount,
    SUM(CAST(ClickCount AS BIGINT)) ClickCount,
    Media,
    Segment_Name,
    Segment_CD,
    Group_Name,
    Group_CD,
    Channel,
    LOB,
    Creative_Message,
    Creative_Category,
    Creative_Type,
    SUM(GRP) GRP,
    Intended_Delivery_Screen

FROM Stage_MM240(NOLOCK)
GROUP BY    AdvertiserName,
            AdvertiserID,
            MediaPlanNumber,
            MediaPlanName,
            PublishingSiteName,
            SiteName,
            Week_Begin_Monday,
            CreativeDescription,
            Media,
            Segment_Name,
            Segment_CD,
            Group_Name,
            Group_CD,
            Channel,
            LOB,
            Creative_Message,
            Creative_Category,
            Creative_Type,
            Intended_Delivery_Screen

沒有WHERE子句,最快的執行將始終是通過表掃描。 如果它使用除唯一的聚集索引(基本上是PK)以外的任何索引,它將使磁盤訪問次數增加一倍。

我建議您嘗試限制正在讀取的數據。 如果不能的話,您只需要等待...

在這種情況下,普通索引將無濟於事,因為沒有限制行的位置條件,您可能應該嘗試探索以下方法之一:
1.使用MAXDOP參數來利用並行性
2.如果您使用的是SSIS,請嘗試使用BULK INSERT命令替換這些語句的可能性。
3.嘗試查看專門用於批量讀取和大數據的列存儲索引 ,因為它利用了壓縮
4.嘗試在非聚集索引中使用INCLUDE子句。 覆蓋INDEXES可用於按照查詢結果集所需的順序對數據進行物理維護,從而減少了以后對SORT操作的需要(我不會選擇此選項)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM