2

ジョブを実行する T-SQL クエリ (SQL Server 2012) がありますが、実行計画を見ると、並べ替え演算子が表示され、次の警告が表示されます

私がこれまで行ってきた読書は、「order by」句を使用すると、このソート反復子を削除できることを示唆しています。サブクエリの並べ替えを実行できず、最も外側のクエリを並べ替えても並べ替え反復子が削除されないため、これは私にとってはオプションではありません。

以前の実行計画で推奨されていた非クラスター化インデックスを追加しました。

この「tempdb スピル」警告に対処するために他にできることはありますか? 現時点ではこれ以上のアイデアはありません。

アイデアをありがとう。

ここに画像の説明を入力

USE MIA_2014_15_v1;
GO

/*
    Notes:
    * The outer query exists so that I can filter by a windowed function (Date_Count).   
*/

SELECT q.Campus,
    q.Student_ID,
    q.Student_Name,
    q.DATEIN,
    q.TIMEIN,
    q.[TIMEOUT],
    q.Date_Count
FROM (
    SELECT TC_Hours.Campus,
        TC_Hours.[Student ID] AS Student_ID,
        Students.Student_Name,
        TC_Hours.[Date] AS DATEIN,
        TC_Hours.[Time In] AS TIMEIN,
        TC_Hours.[Time Out] AS TIMEOUT,
        count(TC_Hours.[Date]) OVER (
            PARTITION BY TC_Hours.Campus,
            TC_Hours.[Student ID],
            TC_Hours.[Date]
            ) AS Date_Count
    FROM dbo.TC_Hours_District TC_Hours
    LEFT JOIN dbo.Base__Student_Name_by_FY Students ON TC_Hours.Campus = Students.Campus
        AND TC_Hours.[Student ID] = Students.Student_ID
    WHERE (NOT students.Student_Name IS NULL)
        AND Students.FY = 'FY15'                
    ) q
WHERE q.Date_Count > 1;
GO
4

2 に答える 2

0

TempDB へのスピルは、基本的にディスクへのスピルです。あなたが述べたように sp_updatestats を使用することもできますが、この投稿の情報に従って必要以上の作業を行う可能性があります。

http://sqlperformance.com/2013/07/sql-statistics/statistics-updates

統計が更新されてもサンプリングを使用している場合、SQL Server はデータ分布を正しく判断できない可能性があり、ヒストグラムは正確ではありません。update statistics を実行して、WITH FULLSCAN オプションを使用してみてください。

https://www.mssqltips.com/sqlservertip/4132/correct-sql-server-tempdb-spills-in-query-plans-caused-by-outdated-statistics/

于 2016-01-25T05:19:49.737 に答える