Rebuild indexů všech tabulek databáze


04-10-2011 21:38 - Zdroj: blog.pavoocek.net
Rychlost zpracování SQL dotazů závisí na vyladěných indexech, to je neoddiskutovatelný fakt. O defragmentaci indexů už jsem se rozepsal ve článku Rebuild indexů online. Pokud je třeba defragmentovat (rebuildovat) index pro jednu tabulku, lze to zařídit „ručně“ přes Management Studio, nebo jedním příkazem. Pokud se ale jedná o složitější databázi, s větším počtem tabulek, může se hodit skrip, který na „jedno kliknutí“ zařídí rebuild indexů všech tabulek vybrané databáze. DECLARE @Database VARCHAR(255) DECLARE @Table VARCHAR(255) DECLARE @cmd NVARCHAR(500) DECLARE @fillfactor INT SET @fillfactor = 90 DECLARE DatabaseCursor CURSOR FOR SELECT name FROM master.dbo.sysdatabases WHERE name IN ('MyDatabase') ORDER BY 1 OPEN DatabaseCursor FETCH NEXT FROM DatabaseCursor INTO @Database WHILE @@FETCH_STATUS = 0 BEGIN SET @cmd = 'DECLARE TableCursor CURSOR FOR SELECT ''['' + table_catalog + ''].['' + table_schema + ''].['' + table_name + '']'' as tableName FROM ' + @Database + '.INFORMATION_SCHEMA.TABLES WHERE table_type = ''BASE TABLE''' -- create table cursor EXEC (@cmd) OPEN TableCursor FETCH NEXT FROM TableCursor INTO @Table WHILE @@FETCH_STATUS = 0 BEGIN -- SQL 2000 command --DBCC DBREINDEX(@Table,' ',@fillfactor) -- SQL 2005 command SET @cmd = 'ALTER INDEX ALL ON ' + @Table + ' REBUILD' PRINT 'EXECUTING: '+@cmd EXEC (@cmd) FETCH NEXT FROM TableCursor INTO @Table END CLOSE TableCursor DEALLOCATE TableCursor FETCH NEXT FROM DatabaseCursor INTO @Database END CLOSE DatabaseCursor DEALLOCATE DatabaseCursor - Pokračovat...
addthis





Poslední příspěvky z blogu:
blog.pavoocek.net



Zašlete svůj blog
Požadavky na Blog
Ochrana osobních údajů
Kontakty

This site uses Thumbshots previews