天天看點

更新所有資料庫統計資訊

This script permit executes the sp_updatestats in all databases at same time.

First I create the stored procedure above in an admin database, for sample I create one database with ADMIN name where I put all administration objects create for me. You can create this sp in exist db, if you want.

Now you can execute this sp in Query Analyzer or create a job to automate this operation. To execute this, call the next commands:

use ADMIN --or the name of database where you create this sp

exec SPUpdateStats

Good work

舉個例子吧:

分析你的查詢如何優化,索引是否正确需要正确的統計資料,資料一般要建表或加列時不會預設自動更新統計列,也就是說如果你的表的資料有1萬行,後來變成1百萬行的時候,如果沒有及時的更新統計那麼優化器就可能生正不正确的優化結果,造成不正确的索引建議。

是以,你可以建立維護計劃定期更新統計,用于之後優化器能生成正确的優化建議。

這是我個人的了解

CREATE PROCEDURE SPUpdateStats

AS

Set Nocount on

Declare db Cursor For

Select name from master.dbo.sysdatabases where name not in ('master','TempDB', 'msdb', 'model')

Declare @dbname varchar(60)

Declare @execmd nvarchar(150)

Open db

Fetch Next from db into @dbname

While @@Fetch_status=0

begin

if @dbname is null

Begin

Print 'null Value'

end

else

PRINT '###########################################################################'

PRINT 'Update Statistics in ' + @dbname

SELECT @execmd = 'USE ' + @dbname + ' EXEC sp_updatestats'

EXEC(@execmd)

PRINT ''

End

Close db

Deallocate db

GO

這裡涉及到一個存儲過程 sp_updatestats,對目前資料庫中所有使用者定義的表運作 UPDATE STATISTICS。這個可以從聯機手冊上看到。但是 UPDATE STATISTICS 有什麼用處可能很多人都不太清楚,下面是來之csdn的回答:

這是我個人的了解。