亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

如何識(shí)別SQL Server中需要添加索引的查詢

freeflydom
2025年7月8日 17:35 本文熱度 1039

引言

在數(shù)據(jù)庫(kù)性能優(yōu)化中,索引是提升查詢速度最有效的手段之一。然而,不恰當(dāng)?shù)乃饕龝?huì)降低寫(xiě)操作性能并增加存儲(chǔ)開(kāi)銷。作為DBA,我們經(jīng)常面臨這樣的挑戰(zhàn):如何精準(zhǔn)定位哪些查詢真正需要添加索引? 本文將分享幾種實(shí)用的T-SQL查詢,幫助您科學(xué)識(shí)別缺失索引,并提供最佳實(shí)踐指南。

一、為什么需要索引優(yōu)化?

  • 性能瓶頸:全表掃描(Table Scan)可能導(dǎo)致簡(jiǎn)單查詢耗時(shí)數(shù)秒

  • 資源浪費(fèi):未使用索引的查詢消耗額外CPU和I/O資源

  • 隱性成本:缺失索引可能使關(guān)鍵業(yè)務(wù)操作延遲數(shù)倍

據(jù)統(tǒng)計(jì),合理添加索引可使查詢性能提升10-100倍(來(lái)源:Microsoft SQL Server性能調(diào)優(yōu)白皮書(shū))

二、核心診斷查詢

1. 缺失索引自動(dòng)生成腳本

SELECT TOP 10
   ROUND(migs.avg_total_user_cost * migs.avg_user_impact * (migs.user_seeks + migs.user_scans), 0) AS improvement_measure,
   DB_NAME(mid.database_id) AS database_name,
   OBJECT_NAME(mid.object_id) AS table_name,
   'CREATE INDEX [IX_' + OBJECT_NAME(mid.object_id) + '_'
       + REPLACE(REPLACE(REPLACE(ISNULL(mid.equality_columns, ''), ', ', '_'), '[', ''), ']', '') 
       + CASE WHEN mid.inequality_columns IS NOT NULL THEN '_' + REPLACE(REPLACE(REPLACE(mid.inequality_columns, ', ', '_'), '[', ''), ']', '') ELSE '' END 
       + '] ON ' + mid.statement 
       + ' (' + ISNULL(mid.equality_columns, '')
       + CASE WHEN mid.equality_columns IS NOT NULL AND mid.inequality_columns IS NOT NULL THEN ',' ELSE '' END
       + ISNULL(mid.inequality_columns, '') + ')' 
       + ISNULL(' INCLUDE (' + mid.included_columns + ')', '') AS create_index_statement,
   migs.user_seeks AS seek_operations,
   migs.avg_user_impact AS improvement_percent
FROM sys.dm_db_missing_index_group_stats AS migs
INNER JOIN sys.dm_db_missing_index_groups AS mig
   ON migs.group_handle = mig.index_group_handle
INNER JOIN sys.dm_db_missing_index_details AS mid
   ON mig.index_handle = mid.index_handle
WHERE mid.database_id = DB_ID()
ORDER BY improvement_measure DESC;

 

結(jié)果解讀:

  • improvement_measure:綜合改進(jìn)指標(biāo)(值越大優(yōu)先級(jí)越高)

  • improvement_percent:預(yù)估查詢性能提升百分比

  • seek_operations:該索引可能被使用的次數(shù)

2. 高開(kāi)銷掃描查詢定位

SELECT TOP 5
   qs.total_logical_reads / qs.execution_count AS avg_logical_reads,
   qs.execution_count,
   SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
       ((CASE qs.statement_end_offset
           WHEN -1 THEN DATALENGTH(st.text)
           ELSE qs.statement_end_offset
       END - qs.statement_start_offset)/2) + 1) AS query_text,
   qp.query_plan
FROM sys.dm_exec_query_stats AS qs
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) AS qp
WHERE qp.query_plan.exist('//RelOp[@PhysicalOp="Index Scan" or @PhysicalOp="Clustered Index Scan"]') = 1
ORDER BY avg_logical_reads DESC;

  

關(guān)鍵指標(biāo):

  • avg_logical_reads > 1000 表示嚴(yán)重I/O問(wèn)題

  • 執(zhí)行計(jì)劃中出現(xiàn) Index Scan 警告

3. 未索引的熱點(diǎn)列檢測(cè)

SELECT TOP 10
   t.name AS TableName,
   c.name AS ColumnName,
   SUM(us.user_scans) AS total_scans
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
LEFT JOIN sys.index_columns ic 
   ON ic.object_id = t.object_id AND ic.column_id = c.column_id
LEFT JOIN sys.indexes i ON i.object_id = t.object_id AND i.index_id = ic.index_id
LEFT JOIN sys.dm_db_index_usage_stats us ON us.object_id = t.object_id AND us.index_id = i.index_id
WHERE i.index_id IS NULL  -- 無(wú)索引列
   AND us.user_scans > 0
GROUP BY t.name, c.name
ORDER BY total_scans DESC;

 

三、索引創(chuàng)建黃金法則

1. 索引設(shè)計(jì)原則

-- 標(biāo)準(zhǔn)結(jié)構(gòu)
CREATE INDEX IX_Table_KeyColumns
ON dbo.Table (Column1 ASC, Column2 DESC)
INCLUDE (Column3, Column4)
WITH (FILLFACTOR = 90); -- 針對(duì)頻繁更新表
-- 篩選索引(針對(duì)熱點(diǎn)數(shù)據(jù))
CREATE INDEX IX_Orders_Active
ON dbo.Orders (OrderDate)
WHERE Status = 'Processing';

 

2. 四要四不要

| 該做的 | 避免的 |

|---------------------------|--------------------------|

| 優(yōu)先選擇高選擇性列 | 在bit類型列建索引 |

| INCLUDED列放常用查詢字段 | 創(chuàng)建重復(fù)功能索引 |

| 定期重建碎片率>30%的索引 | 盲目接受所有系統(tǒng)建議 |

| 測(cè)試環(huán)境驗(yàn)證性能提升 | 在生產(chǎn)環(huán)境直接創(chuàng)建索引 |

四、高級(jí)技巧

1. 索引使用監(jiān)控

SELECT 
   OBJECT_NAME(ix.object_id) AS TableName,
   ix.name AS IndexName,
   ix.type_desc AS IndexType,
   us.user_seeks,
   us.user_scans,
   us.user_lookups,
   us.user_updates
FROM sys.dm_db_index_usage_stats us
JOIN sys.indexes ix ON us.object_id = ix.object_id AND us.index_id = ix.index_id
WHERE us.database_id = DB_ID()
   AND OBJECTPROPERTY(us.object_id, 'IsUserTable') = 1;

 

決策依據(jù):

  • user_updates > 10 * (user_seeks + user_scans) → 考慮刪除索引

  • user_lookups 過(guò)高 → 需要優(yōu)化INCLUDED列

2. 查詢存儲(chǔ)深度分析(SQL Server 2016+)

SELECT 
   q.query_id,
   t.query_sql_text,
   rs.avg_duration,
   rs.avg_logical_io_reads,
   p.query_plan
FROM sys.query_store_query q
JOIN sys.query_store_query_text t ON q.query_text_id = t.query_text_id
JOIN sys.query_store_plan p ON q.query_id = p.query_id
JOIN sys.query_store_runtime_stats rs ON p.plan_id = rs.plan_id
WHERE rs.last_execution_time > DATEADD(DAY, -7, GETDATE())
ORDER BY rs.avg_logical_io_reads DESC;

  

五、避坑指南

  1. 索引覆蓋陷阱:包含過(guò)多INCLUDED列會(huì)顯著增大索引體積

  2. 參數(shù)嗅探問(wèn)題:使用OPTION(RECOMPILE)解決參數(shù)敏感查詢

  3. 鎖升級(jí)風(fēng)險(xiǎn):?jiǎn)嗡饕^(guò)8KB可能引發(fā)鎖升級(jí)

  4. 統(tǒng)計(jì)信息滯后:開(kāi)啟AUTO_UPDATE_STATISTICS_ASYNC

結(jié)語(yǔ)

精準(zhǔn)的索引優(yōu)化需要持續(xù)監(jiān)控和迭代調(diào)整。建議每周運(yùn)行一次診斷查詢,重點(diǎn)關(guān)注:

  • 改進(jìn)潛力(improvement_measure) > 100,000 的索引

  • 邏輯讀取(avg_logical_reads) > 5000 的查詢

  • 掃描次數(shù)(total_scans) > 10,000 的熱點(diǎn)列


附錄工具推薦:

  1. sp_BlitzIndex - 索引分析神器

  2. Database Engine Tuning Advisor - 微軟官方調(diào)優(yōu)工具

  3. SolarWinds DPA - 商業(yè)級(jí)性能監(jiān)控平臺(tái)

通過(guò)科學(xué)診斷和謹(jǐn)慎實(shí)施,您可以將查詢性能提升300%以上!

?轉(zhuǎn)自https://www.cnblogs.com/LuoCore/p/18972388


該文章在 2025/7/8 17:38:35 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved