解譯包含點陣圖篩選的執行計畫

使用點陣圖篩選的平行查詢執行計畫會在一或多個運算子子樹中具有點陣圖運算子。點陣圖篩選會在運算子樹狀結構的一部分中使用精簡方式顯示資料表中的一組值,以便從此樹狀結構的另一個部分中篩選第二個資料表中的資料列。藉由盡早移除查詢中的不必要資料列,後續的運算子需要處理的資料列就會更少,而查詢的整體效能也會提升。

在 SQL Server 2008 中,點陣圖篩選可以在最佳化之後導入平行查詢計畫中 (如同 SQL Server 2005 中一樣),或是在查詢計畫產生期間由查詢最佳化工具動態導入。當動態導入此篩選時,就將它稱為「最佳化點陣圖篩選」。查詢計畫可包含點陣圖篩選和最佳化點陣圖篩選。查詢最佳化工具會判斷點陣圖篩選或最佳化點陣圖篩選何時具有足夠的選擇性能夠充分運用以及將篩選套用到哪個運算子。如需詳細資訊,請參閱<透過點陣圖篩選讓資料倉儲查詢效能最佳化>。

當您分析包含點陣圖篩選的執行計畫時,一定要瞭解資料如何流經此計畫以及要將篩選套用到何處。點陣圖篩選和最佳化點陣圖篩選會建立在雜湊聯結的建置輸入 (維度資料表) 端上;但是,實際篩選通常是在平行處理原則運算子內執行,這位於雜湊聯結的探查輸入 (事實資料表) 端上。但是,當點陣圖篩選是以整數資料行為根據時,此篩選可直接套用到初始資料表或索引掃描作業,而不是平行處理原則運算子。這項技術稱為「同資料列的最佳化」。

在執行程序表中檢視點陣圖篩選

若要在查詢計畫中檢視點陣圖篩選,請使用 SET 選項 SHOWPLAN_ALL、SHOWPLAN_TEXT 或 SHOWPLAN_XML,或是在 SQL Server Management Studio 中按一下 [包括實際執行計畫]

如果已產生 XML 執行程序表,會以下列方式列出實體和邏輯點陣圖運算子:

<RelOp NodeId="2" PhysicalOp="Bitmap" LogicalOp="Bitmap Create" EstimateRows="88" EstimateIO="0" EstimateCPU="0.0718125" AvgRowSize="6893" EstimatedTotalSubtreeCost="0.229385" Parallel="1" EstimateRebinds="0" EstimateRewinds="0">

套用點陣圖篩選的運算子會在 [探查資料行] 屬性中包含點陣圖的名稱。

套用最佳化點陣圖篩選的運算子包含點陣圖述詞,其格式為 PROBE([Opt_Bitmap1001], {[column_name]} [, 'IN ROW'])。點陣圖述詞會報告下列資訊:

  • 對應至點陣圖建立運算子中導入之名稱的點陣圖名稱。前置詞 'Opt_' 表示已使用最佳化點陣圖篩選。

  • 探查所針對的資料行。這是篩選過的資料流過樹狀結構的起始點。

  • 點陣圖探查是否在同資料列內執行。當使用同資料列最佳化時,會使用 IN ROW 參數叫用點陣圖探查。否則,會遺漏這個參數。

範例

以下範例將示範如何在執行計畫中使用最佳化點陣圖篩選。DimProduct 和 DimCustomer 這兩個維度資料表會在單一整數資料行上使用主索引鍵與外部索引鍵的聯結,以聯結至 FactInternetSales 事實資料表。

USE AdventureWorksDW2008R2;
GO
SELECT * 
FROM dbo.FactInternetSales AS F
INNER JOIN dbo.DimProduct AS D1 ON F.ProductKey = D1.ProductKey
INNER JOIN dbo.DimCustomer AS D2 ON F.CustomerKey = D2.CustomerKey
WHERE D1.StandardCost <= 30 AND D2.YearlyIncome <= 50000;

下圖將顯示當維度資料表已經過掃描後,而且從事實資料表中刪除不合格資料列所需的資訊為已知時,會在這兩個維度資料表的運算子子樹中建立最佳化點陣圖篩選。然後會將此篩選套用到最早可能位置中的事實資料表,也就是資料表掃描運算子。此篩選的應用顯示於 [資料表掃描] 屬性的 [述詞] 區段中。[述詞] 中所顯示的資訊指示,會同時使用最佳化點陣圖篩選 Opt_Bitmap1008 和 Opt_Bitmap1009 來限制從事實資料表中傳回的資料列。在事實資料表中探查所針對的資料行會列為 [F].[CustomerKey] 和 [F].[ProductKey]。會顯示 IN ROW 參數,指示此程序中已使用同資料列最佳化。如果同資料列最佳化不可行,會將點陣圖篩選套用到平行處理原則運算子。

具點陣圖篩選的 SQL Server 查詢計畫。

根據此圖,可以做出以下結論:

  • 最佳化點陣圖篩選會建立在兩個子樹中。

  • 這兩個篩選會動態地套用到單一 (資料表掃描) 運算子。

  • 評估為最具選擇性的最佳化點陣圖篩選會最先實作。

  • 維度資料表聯結至事實資料表的資料行可允許使用同資料列最佳化。也就是說,聯結是以單一整數資料行為根據。

  • 此篩選會盡早套用在查詢中,如此會讓從資料表掃描掃描作業流經樹狀結構內其餘運算子的資料列數目減少。