關於遺漏索引功能

遺漏索引功能會使用動態管理物件和執行程序表,來提供可加強 SQL Server 查詢效能的遺漏索引資訊。

元件

查詢最佳化工具產生查詢計畫時,它會分析特定篩選條件的最佳索引。如果最佳索引不存在,則查詢最佳化工具會產生次佳的查詢計畫,但仍會儲存這些索引的相關資訊。遺漏索引功能可讓您存取這些索引的資訊,讓您決定是否應該實作它們。

遺漏索引功能是由下列元件組成:

  • 一組可進行查詢以傳回遺漏索引資訊的動態管理物件。

  • XML 執行程序表中的 MissingIndexes 元素,可將查詢最佳化工具視為遺漏的索引與遺漏它們的查詢產生關聯。

遺漏索引功能元件會在下列章節中詳細討論。

動態管理物件

在 SQL Server 上執行一般工作負載之後,您可查詢下表中所列的動態管理物件,以擷取遺漏索引的資訊。這些動態管理物件會存放在 master 資料庫中。

動態管理物件

傳回的資訊

sys.dm_db_missing_index_group_stats (Transact-SQL)

傳回遺漏索引群組的摘要資訊 (例如,透過實作特定遺漏索引的群組而取得的效能改進)。

sys.dm_db_missing_index_groups (Transact-SQL)

傳回特定遺漏索引群組的資訊 (例如,群組識別碼和該群組所包含之所有遺漏索引的識別碼)。

sys.dm_db_missing_index_details (Transact-SQL)

傳回遺漏索引的詳細資訊;例如,它會傳回遺漏索引之資料表的名稱和識別碼,以及應組成遺漏索引的資料行和資料行類型。

sys.dm_db_missing_index_columns (Transact-SQL)

傳回遺漏索引之資料庫資料表資料行的資訊。

您可透過工具或指令碼使用這些動態管理物件所傳回的資訊,而這些工具或指令碼會使用這些資訊產生將實作遺漏索引的 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 應用程式>。