關於遺漏索引功能
遺漏索引功能會使用動態管理物件和執行程序表,來提供可加強 SQL Server 查詢效能的遺漏索引資訊。
元件
查詢最佳化工具產生查詢計畫時,它會分析特定篩選條件的最佳索引。如果最佳索引不存在,則查詢最佳化工具會產生次佳的查詢計畫,但仍會儲存這些索引的相關資訊。遺漏索引功能可讓您存取這些索引的資訊,讓您決定是否應該實作它們。
遺漏索引功能是由下列元件組成:
一組可進行查詢以傳回遺漏索引資訊的動態管理物件。
XML 執行程序表中的 MissingIndexes 元素,可將查詢最佳化工具視為遺漏的索引與遺漏它們的查詢產生關聯。
遺漏索引功能元件會在下列章節中詳細討論。
動態管理物件
在 SQL Server 上執行一般工作負載之後,您可查詢下表中所列的動態管理物件,以擷取遺漏索引的資訊。這些動態管理物件會存放在 master 資料庫中。
動態管理物件 |
傳回的資訊 |
---|---|
傳回遺漏索引群組的摘要資訊 (例如,透過實作特定遺漏索引的群組而取得的效能改進)。 |
|
傳回特定遺漏索引群組的資訊 (例如,群組識別碼和該群組所包含之所有遺漏索引的識別碼)。 |
|
傳回遺漏索引的詳細資訊;例如,它會傳回遺漏索引之資料表的名稱和識別碼,以及應組成遺漏索引的資料行和資料行類型。 |
|
傳回遺漏索引之資料庫資料表資料行的資訊。 |
您可透過工具或指令碼使用這些動態管理物件所傳回的資訊,而這些工具或指令碼會使用這些資訊產生將實作遺漏索引的 CREATE INDEX DDL 陳述式。
交易一致性
個別修改這些動態管理物件中的資料列並不是交易一致的。亦即,如果中止查詢或回復含括交易,則包含該查詢之遺漏索引資訊的資料列仍會存在。
只支援整個交易。並不支援檢查點和部份回復。
[!附註]
此外,資料表的中繼資料變更時,會從這些動態管理物件中刪除該資料表的所有遺漏索引資訊。例如,在資料表中加入或卸除資料行時,或在資料表的資料行建立索引時,都會變更資料表中繼資料。
XML 執行程序表 MissingIndexes 元素
若要將查詢與動態管理物件結果中所識別的遺漏索引產生關聯,您可檢視 XML 執行程序表中的 MissingIndexes 元素。下列範例會說明 MissingIndexes 元素:
<ShowPlanXML…>
<BatchSequence>
<Batch>
<Statements>
<StmtSimple…>
<StatementSetOptions… />
<QueryPlan…>
<MissingIndexes>
<MissingIndexGroup Impact="22.8764">
<MissingIndex Database="[ADVENTUREWORKS2008R2]" Schema="[Person]" Table="[Address]">
<ColumnGroup Usage="EQUALITY">
<Column Name="[PostalCode]" ColumnId="4" />
</ColumnGroup>
<ColumnGroup Usage="INEQUALITY">
<Column Name="[ModifiedDate]" ColumnId="5" />
</ColumnGroup>
<ColumnGroup Usage="INCLUDE">
<Column Name="[AddressLine1]" ColumnId="2" />
<Column Name="[AddressLine2]" ColumnId="3" />
<Column Name="[StateProvinceID]" ColumnId="1" />
</ColumnGroup>
</MissingIndex>
</MissingIndexGroup>
</MissingIndexes>
MissingIndexes 元素中所包含的資訊能協助您決定可用來提升 StmtSimple 元素中所述之特定查詢效能的索引,而這個元素會包含 Transact-SQL 陳述式本身。然後,使用這個元素所傳回的資訊,即可寫入 CREATE INDEX DDL 陳述式。
啟用和停用遺漏索引功能
預設會開啟遺漏索引功能。未提供任何控制項來開啟或關閉這個功能,或重設在查詢動態管理物件時所傳回的任何資料表。重新啟動 SQL Server 時,會卸除所有遺漏的索引資訊。
只有在搭配使用 -x 引數與 sqlservr 命令提示字元公用程式以啟動 SQL Server 執行個體時,才可停用這個功能。如需詳細資訊,請參閱<sqlservr 應用程式>。