SQL Server 索引优化 ——索引缺失
生活随笔
收集整理的這篇文章主要介紹了
SQL Server 索引优化 ——索引缺失
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
sys.dm_db_missing_index_details缺失索引明細,包括相等列,不等列以及包含列,執(zhí)行如下腳本,并查看結果
1 USE [testDB] 2 GO 3 SELECT * FROM sys.dm_db_missing_index_details;
從結果可以看出,所有數(shù)據(jù)庫中,缺失索引的表或索引視圖都被列出來了。但是否需要把列出來的缺失索引都直接建上去呢?
顯然,這樣做可能不但不能提升性能,還可能會導致性能下降。
如: 有些查詢是偶發(fā)性的,使用率極低,而對應的表又有大量的插入、更新等;或者某些索引的創(chuàng)建對性能本身提升不多;
又或者,缺失索引的列,在某些存儲的索引中已經部分包含,按照缺失索引給出信息去創(chuàng)建,會造成索引冗余。
結合以上情形,如果我們想補缺失索引,那么我們還需要知道缺失索引使用的頻率,對性能的提升等信息。
動態(tài)視圖sys.dm_db_missing_index_group_stats給出了我們需要的信息,
下面我們給出缺失索引的狀態(tài)
1 SELECT OBJECT_NAME(m.OBJECT_ID) tableName,equality_columns,inequality_columns,included_columns, 2 unique_compiles,user_seeks,user_scans,avg_user_impact,avg_system_impact 3 FROM sys.dm_db_missing_index_details m 4 LEFT JOIN sys.dm_db_missing_index_groups g ON m.index_handle=g.index_handle 5 LEFT JOIN sys.dm_db_missing_index_group_stats s ON g.index_group_handle=s.group_handle 6 WHERE m.database_id=DB_ID();
我們可以根據(jù)上面查詢的結果,用戶查找、用戶掃描次數(shù),用戶性能影響,初步判斷需要的索引。
最終還要根據(jù)已經存在的索引,以及索引創(chuàng)建的一些規(guī)則,確定需要新創(chuàng)建的索引。
創(chuàng)建腳本:
1 SELECT TOP 100
2 statement AS 表 ,
3 equality_columns AS 相等列 ,
4 inequality_columns AS 不相等列 ,
5 included_columns AS 包含列 ,
6 user_scans + user_seeks AS 總查詢次數(shù) ,
7 avg_user_impact AS 平均百分比收益 ,
8 avg_total_user_cost AS 平均成本 ,
9 avg_total_user_cost * avg_user_impact * ( user_scans + user_seeks ) AS 可能改進 ,
10 'CREATE INDEX [index_' + obj.name + '_'
11 + CONVERT(VARCHAR(32), GS.group_handle) + '_'
12 + CONVERT(VARCHAR(32), D.index_handle) + ']' + ' ON ' + [statement]
13 + ' (' + ISNULL(equality_columns, '')
14 + CASE WHEN equality_columns IS NOT NULL
15 AND inequality_columns IS NOT NULL THEN ','
16 ELSE ''
17 END + ISNULL(inequality_columns, '') + ')' + ISNULL(' INCLUDE ('
18 + included_columns
19 + ')', '') AS Create_Index_Syntax
20 FROM sys.dm_db_missing_index_details AS D
21 INNER JOIN sys.dm_db_missing_index_groups G ON G.index_handle = D.index_handle
22 INNER JOIN sys.dm_db_missing_index_group_stats GS ON G.index_group_handle = GS.group_handle
23 INNER JOIN sys.objects AS obj ON obj.object_id = OBJECT_ID([statement])
24 AND obj.type = 'U'
總結
以上是生活随笔為你收集整理的SQL Server 索引优化 ——索引缺失的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 御姐是什么意思啊(当御姐需要什么条件)
- 下一篇: 万圣节的由来和传说(有哪些习俗)