索引碎片整理
查詢是否發生了索引碎片
SELECT object_name(dt.object_id) Tablename,si.name Indexname,dt.avg_fragmentation_in_percent AS ExternalFragmentation,
dt.avg_page_space_used_in_percent AS internalFragmentation
FROM
(
SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (db_id('SmartTRMUAES'),null,null,null,'DETAILED')
WHERE index_id <> 0) AS dt
INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id AND dt.avg_fragmentation_in_percent>10
AND dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent
DESC
SELECT object_name(dt.object_id) Tablename,si.name Indexname,dt.avg_fragmentation_in_percent AS ExternalFragmentation,
dt.avg_page_space_used_in_percent AS internalFragmentation
FROM
(
SELECT object_id,index_id,avg_fragmentation_in_percent,avg_page_space_used_in_percent
FROM sys.dm_db_index_physical_stats (db_id('SmartTRMUAES'),null,null,null,'DETAILED')
WHERE index_id <> 0) AS dt
INNER JOIN sys.indexes si ON si.object_id=dt.object_id
AND si.index_id=dt.index_id AND dt.avg_fragmentation_in_percent>10
AND dt.avg_page_space_used_in_percent<75 ORDER BY avg_fragmentation_in_percent
DESC
使用下面的規則分析結果,你就可以找出哪裡發生了索引碎片:
1)ExternalFragmentation的值>10表示對應的索引發生了外部碎片;
2)InternalFragmentation的值<75表示對應的索引發生了內部碎片。
1)ExternalFragmentation的值>10表示對應的索引發生了外部碎片;
2)InternalFragmentation的值<75表示對應的索引發生了內部碎片。
如何整理索引碎片?
有兩種整理索引碎片的方法:
1)重組有碎片的索引:執行下面的命令
ALTER INDEX ALL ON TableName REORGANIZE
有兩種整理索引碎片的方法:
1)重組有碎片的索引:執行下面的命令
ALTER INDEX ALL ON TableName REORGANIZE
2)重建索引:執行下面的命令
ALTER INDEX ALL ON TableName REBUILD WITH (FILLFACTOR=90,ONLINE=ON)
ALTER INDEX ALL ON TableName REBUILD WITH (FILLFACTOR=90,ONLINE=ON)
也可以使用索引名代替這裡的“ALL”關鍵字重組或重建單個索引,也可以使用SQL Server管理工作臺進行索引碎片的整理。
什麼時候用重組,什麼時候用重建呢?
當對應索引的外部碎片值介於10-15之間,內部碎片值介於60-75之間時使用重組,其它情況就應該使用重建。
值得注意的是重建索引時,索引對應的表會被鎖定,但重組不會鎖表,因此在生產系統中,對大表重建索引要慎重,因為在大表上建立索引可能會花幾個小時,幸運的是,從SQL Server 2005開始,微軟提出了一個解決辦法,在重建索引時,將ONLINE選項設定為ON,這樣可以保證重建索引時表仍然可以正常使用。
雖然索引可以提高查詢速度,但如果你的資料庫是一個事務型資料庫,大多數時候都是更新操作,更新資料也就意味著要更新索引,這個時候就要兼顧查詢和更新操作了,因為在OLTP資料庫表上建立過多的索引會降低整體資料庫效能。
我給大家一個建議:如果你的資料庫是事務型的,平均每個表上不能超過5個索引,如果你的資料庫是資料倉儲型,平均每個表可以建立10個索引都沒問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9522838/viewspace-2641751/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL表碎片整理MySql
- 驗證Oracle 10g線上整理碎片索引是否失效過程Oracle 10g索引
- Oracle資料表碎片整理Oracle
- mysql之 OPTIMIZE TABLE整理碎片MySql
- windows10系統磁碟碎片整理在哪 win10如何開啟磁碟碎片整理WindowsWin10
- Oracle資料庫表碎片整理Oracle資料庫
- sql server 索引闡述系列七 索引填充因子與碎片SQLServer索引
- MySQL碎片整理小節--例項演示MySql
- 硬碟加速和磁碟碎片整理軟體硬碟
- Oracle 資料庫整理表碎片Oracle資料庫
- 如何避免SHRINKDATABASE & SHRINKFILE 產生索引碎片(轉載)Database索引
- win10系統無法整理磁碟碎片提示已由其它程式建立了計劃磁碟碎片整理的解決方法Win10
- 檢視錶和索引碎片情況相關資訊索引
- java/android 做題中整理的碎片小貼士(4)JavaAndroid
- win10怎麼禁用磁碟整理_win10關閉磁碟碎片整理的方法Win10
- win10系統如何關閉磁碟碎片整理計劃Win10
- Sqlserver的表沒有高水位但是有碎片的概念,sqlserver表的碎片的檢視和整理方法SQLServer
- MySQL索引選擇及規則整理MySql索引
- Oracle 20c 新特性:Online SecureFiles Defragmentation 線上的 LOB 碎片整理OracleFragment
- 利用姑姑印表機,說說碎片化知識整理的那些事兒
- 索引選擇度問題最佳化整理索引
- jQuery碎片jQuery
- 字串碎片字串
- Win10系統下不能使用碎片整理沒反應如何解決Win10
- defrag" 命令的幫助資訊,該命令用於對磁碟進行碎片整理操作
- 碎片化的學習需要整理、沉澱,記錄到部落格是最好的方式!
- [每天進步一點點]mysql筆記整理(三):索引MySql筆記索引
- Auslogics Disk Defrag Pro v11啟用版下載、安裝、使用教程 (磁碟碎片整理工具)
- DataX的知識碎片
- Android 碎片(Fragment)講解AndroidFragment
- Java鬥地主專案碎片Java
- Vite打包碎片化,如何化解?Vite
- 碎片化時間高效利用
- Spark Core的知識碎片Spark
- phpcms碎片管理如何使用呢?PHP
- MySQL的表碎片處理MySql
- 記憶體碎片與緩解記憶體
- 碎片化學習Java大綱Java