我正在重建數據庫上的索引。 我需要驗證它是否完成。 有人可以指導我。 我正在使用SQL Server 2008 R2在sql server上重建索引
回答
如果您已成功爲表重新建立索引,那麼索引碎片將爲零(或接近如果您有熱表)。你可以使用這個腳本來檢查碎片級別
DECLARE
@IndexID int,
@TableID int,
@IndexName varchar(256)
--Enter index name here
SELECT @IndexName = '<index name>'
--Enter table name here
SET @TableID = OBJECT_ID('<table name>')
SELECT @IndexID = IndID
FROM sysindexes
WHERE
id = @TableID
AND name = @IndexName
DBCC SHOWCONTIG (@id, @IndexID)
你在找什麼在輸出稱爲掃描密度財產。這應該接近100%。如果沒有,那麼你重新索引是不完整/成功
如果你有大量的表/索引的,這樣可以得到由繁瑣,所以其短路自動生成的腳本是這樣的:
SELECT 'DBCC SHOWCONTIG ' +
'('
+ CONVERT(varchar(32), si.id) + ','
+ CONVERT(varchar(32), si.indid) +
')--' + so.name
FROM sysobjects so
INNER JOIN sysindexes si
ON (so.id = si.id)
WHERE (
so.type = 'U' AND
si.indid < 2 AND
si.id = object_id(so.name)
)
如果您正在查找數據庫中所有索引和表的詳細信息,可以使用。
SELECT OBJECT_NAME(object_id),*
FROM sys.dm_db_index_physical_stats(DB_ID(),NULL,NULL,NULL,'SAMPLED')
我剛想到你可能也在問如何知道重新索引的進度。爲此,您可以使用
SELECT percent_complete
from sys.dm_exec_requests
where session_id= <spid of interest>
我有一個索引重建作業運行了12個小時。運行完成百分比查詢並返回結果爲0. LOL。 – MaDDoG 2013-05-23 00:07:10
@MDDDoG - 實際上看文檔看起來這個列只填充爲'ALTER INDEX REORGANIZE'。文檔也用來說'CREATE INDEX'更新了這一列,但看起來好像[該聲明現在已被刪除](https://connect.microsoft.com/SQLServer/feedback/details/641790/doc-sys- DM-EXEC-請求-話題是不一致的版本間) – 2013-05-23 07:16:03
一個關鍵的事情是將運行「索引物理統計」報告「由Top表磁盤使用」你重建索引之前和之後的報告。
在「索引物理統計」報告中,您可以看到每個索引是如何分散的。
要查看這些報告... *在Sql Server Management Studio中右鍵單擊數據庫 *將鼠標懸停在「報告」上,然後選擇「標準報告」,然後選擇所需報告。
對於您可以設置識別索引碎片和重建他們(更多信息)的腳本,檢查了這一點:
http://www.foliotek.com/devblog/sql-server-optimization-with-index-rebuilding/
你可以試試這個方法。它將重建數據庫中的所有表的索引,打印出結果,因爲它發展到你的管理工作室的消息窗格:
CREATE PROCEDURE [dbo].[ReIndexDatabase]
AS
DECLARE @MyTable VARCHAR(255)
DECLARE myCursor
CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'base table'
OPEN myCursor
FETCH NEXT
FROM myCursor INTO @MyTable
WHILE @@FETCH_STATUS = 0 BEGIN
PRINT 'Reindexing Table: ' + @MyTable
EXEC('ALTER INDEX ALL ON '[email protected]+'
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = OFF,
STATISTICS_NORECOMPUTE = ON)');
FETCH NEXT FROM myCursor INTO @MyTable
END
CLOSE myCursor
DEALLOCATE myCursor
EXEC sp_updatestats
注意頁面頂部的信息。
- 1. 當在SQL Server重建索引2008
- 2. SQL Server索引重建與重組
- 3. 在SQL Server 2008上重新組織和重建索引
- 4. 重新構建SQL Server全文索引
- 5. SQL Server 2005收縮和重建索引
- 6. sql server刪除列重建索引?
- 7. 在SQL Server 2008 R2中鏈接服務器上重建索引
- 8. SQL Server重複索引
- 9. 在Sql Server維護計劃中重組索引與重建索引
- 10. sql server在短時間內重組和重建索引
- 11. 如何Foriegn重點-SQL Server上創建聚集索引
- 12. SQL Server表上的索引
- 13. 在InvokeSBFarmUpgrade上重建索引
- 14. SQL Server索引
- 15. SQL Server索引
- 16. SQL Server索引
- 17. 重命名的SQL Server索引在MS SQL Server
- 18. 使用T-SQL重建SQL Server 2005中的所有XML索引
- 19. 在SQL Server Express 2005中自動重建索引
- 20. 重建SQL索引 - 何時?
- 21. sql server:在必要時在外鍵上創建索引
- 22. 索引與MD5在SQL Server
- 23. 列索引在SQL Server 2008
- 24. 如何在Sql Compact 3.5 SP1上重建/重新組織索引?
- 25. 重置SQL Server索引使用
- 26. 當在SQL Server上創建非聚集索引
- 27. 在SQL Server 2012上使用ServiceStack OrmLite創建非聚集索引
- 28. 在SQL Server數據庫上創建Lucene索引
- 29. SQL Server - 在特定分區上創建非聚簇索引
- 30. sql server 2000 TSQL:在表變量上創建索引
感謝Seth.I在數據庫表中的100和每個table.So不知道索引名其他任何方式做到這一點 – Pradeep 2011-03-07 09:50:54
我已經添加了一個AUTOGEN腳本應該給你相同的腳本如上爲每個表和索引。 – Seth 2011-03-07 10:04:11
更正了表別名。並在末尾添加了'so.name'作爲註釋,它幫助我快速定位到它指向的對象。你可以拋出一個'ORDER BY so.name',這個列表將按對象名排序。確實有用的腳本。 – Yaroslav 2013-03-16 01:07:03