SQL索引二(檢視索引的缺失)

2021-09-01 15:20:15 字數 2611 閱讀 7947

select * from sys.dm_db_missing_index_details
index_handle

int標識特定的缺失索引。 該識別符號在伺服器中是唯一的。 index_handle是此表的鍵。

database_id

smallint

標識帶有缺失索引的表所駐留的資料庫。

object_id

int標識索引缺失的表。

equality_columns

nvarchar(4000)

構成相等謂詞的列的逗號分隔列表,謂詞的形式如下:

table.column =constant_value

inequality_columns

nvarchar(4000)

構成不等謂詞的列的逗號分隔列表,例如以下形式的謂詞:

table.column > constant_value

「=」之外的任何比較運算子都表示不相等。

included_columns

nvarchar(4000)

用於查詢的涵蓋列的逗號分隔列表。 有關涵蓋的詳細資訊或包含的列,請參閱建立帶有包含列的索引。

對於記憶體優化的索引 (包括雜湊和記憶體優化非聚集),忽略included_columns。 每個記憶體優化索引中均包含表的所有列。

statement

nvarchar(4000)

索引缺失的表的名稱。

注:include:

非鍵列即包含列 只存在非聚集索引中。

包含列的優點

1)他們可以是不允許作為索引鍵列的資料型別。

2)在計算索引鍵列數或索引鍵大小時, 資料庫引擎 不考慮它們。

重點:如果根據以上缺失索引從新建立新的索引(注:並不是所有缺失索引都需要建立索引,根據實際情況來建立,畢竟建立索引是以消耗空間換時間!!!)

建立語句: create [unique|clustered|nonclustered] index index_name on table_name(property_name)  include(include_name)

ps:

index_name:索引名稱

table_name:表名稱

property_name:索引列 即上述**中的equality_columns,inequality_columns

include_name:包含列included_columns

此處附上自己的理解:

1)針對於查詢的字段 一般需要放到include 包含字段裡面;

2)對於關聯關係的字段(inner join、left等) 一般可以放到include(非鍵列、包含列) 或者索引欄位中,但是放到include(非鍵列、包含列) 裡面 對於消耗較低;

3)對於where 條件的字段或者group by、order by 的資料一般 作為索引字段;

具體索引基礎可參考:sql索引

dbcc showcontig(a)
dbcc showcontig 正在掃瞄 'a' 表...

表: 'a' (143272632);索引 id: 1,資料庫 id: 9

已執行 table 級別的掃瞄。

- 掃瞄頁數................................: 621

- 掃瞄區數..............................: 78

- 區切換次數..............................: 77

- 每個區的平均頁數........................: 8.0

- 掃瞄密度 [最佳計數:實際計數].......: 100.00% [78:78]

- 邏輯掃瞄碎片 ..................: 0.00%掃瞄頁數

表或索引的頁數。

掃瞄擴充套件盤區數

表或索引中的擴充套件盤區數。

擴充套件盤區開關數

遍歷索引或表的頁時,dbcc 語句從乙個擴充套件盤區移動到其它擴充套件盤區的次數。

平均擴充套件盤區上的平均頁數

頁鏈中每個擴充套件盤區的頁數。

掃瞄密度

[最佳值:實際值]

最佳值是指在一切都連續地鏈結的情況下,擴充套件盤區更改的理想數目。實際值是指擴充套件盤區更改的實際次數。如果一切都連續,則掃瞄密度數為 100;如果小於 100,則存在碎片。掃瞄密度為百分比值。

邏輯掃瞄碎片

擴充套件盤區掃瞄碎片

平均每頁上的平均可用位元組數

所掃瞄的頁上的平均可用位元組數。數字越大,頁的填滿程度越低。數字越小越好。該數還受行大小影響:行大小越大,數字就越大。

平均頁密度(完整)

平均頁密度(為百分比)。該值考慮行大小,所以它是頁的填滿程度的更準確表示。百分比越大越好。

mysql 建立索引 刪除索引 檢視索引sql語句

在執行create table語句時可以建立索引,也可以單獨用create index或alter table來為表增加索引。alter table用來建立普通索引 unique索引或primary key索引。alter table table name add index index name ...

mysql 檢視sql是否使用索引

explain執行結果關注以下幾個字段 table 這一列是查詢設計的表。type 很重要的一列,顯示了查詢使用了那種型別,是否使用的索引,能反映出語句的質量。一般這個指標從好到壞依次是 system const eq ref ref 最好達到 fulltext ref or null index ...

SQL 索引 建立索引

create index 語句用於在表中建立索引。在不讀取整個表的情況下,索引使資料庫應用程式可以更快地查詢資料。您可以在表中建立索引,以便更加快速高效地查詢資料。使用者無法看到索引,它們只能被用來加速搜尋 查詢。注釋 更新乙個包含索引的表需要比更新乙個沒有索引的表更多的時間,這是由於索引本身也需要...