Breaking News
Loading...
05/09/2013

Statistics và Index trong SQL Server

Có một mối liên hệ quan trọng giữa Index và Statistics trong SQL Server, ta nên nhận biết điều này..


Nếu ta có một index, SQL Server sẽ sử dụng index này để lấy những records. Nếu ta tạo ra một index trên một column tên là City có < 90% giá trị là 'Vancouver', SQL Server sẽ hầu như thực hiện một table scan thay vì sử dụng index nếu nó biết những thông tin thống kê này.

Tham khảo: http://blog.idera.com/sql-server/understanding-sql-server-statistics/

Khi nào Statistics tự động Update trong SQL Server:

http://www.sqlskills.com/blogs/erin/understanding-when-statistics-will-automatically-update/
http://technet.microsoft.com/en-us/library/jj553546.aspx

Những vấn đề gây ra bởi out-up-date Statistics trong SQL Server

http://www.mssqltips.com/sqlservertip/2723/issues-caused-by-outdated-statistics-in-sql-server/?utm_source=dailynewsletter&utm_medium=email&utm_content=headline&utm_campaign=20130916

Đoạn script kiểm tra Statistics last update cho tất cả Index

SELECT o.name, i.name AS [Index Name],STATS_DATE(i.[object_id],
i.index_id) AS [Statistics Date], s.auto_created,
s.no_recompute, s.user_created, st.row_count
FROM sys.objects AS o WITH (NOLOCK)
INNER JOIN sys.indexes AS i WITH (NOLOCK)
ON o.[object_id] = i.[object_id]
INNER JOIN sys.stats AS s WITH (NOLOCK)
ON i.[object_id] = s.[object_id]
AND i.index_id = s.stats_id
INNER JOIN sys.dm_db_partition_stats AS st WITH (NOLOCK)
ON o.[object_id] = st.[object_id]
AND i.[index_id] = st.[index_id]
WHERE o.[type] = 'U'
ORDER BY STATS_DATE(i.[object_id], i.index_id) ASC OPTION (RECOMPILE);

Có 1 lệnh để kiểm tra Statistics của các object trong table hay View
DBCC SHOW_STATISTICS ( table_or_indexed_view_name, target )
[ WITH [ < options > ]

--ví dụ:
DBCC SHOW_STATISTICS ( 'Sales.SalesOrderDetail’
, PK_SalesOrderDetail_SalesOrderID_SalesOrderDetailID )

Có 4 tùy chọn trong phần option là: NO_INFOMSGS, STAT_HEADER, DENSITY_VECTOR, và HISTOGRAM

Nếu ta muốn update Statistics cho một table hay cho một Statistics cụ thể thì dùng lệnh sau:

UPDATE STATISTICS 
--hoặc
UPDATE STATISTICS 

Liệt kê ngày update Statistic cho tất cả các object trong SQL Server
SELECT OBJECT_NAME(object_id) AS [ObjectName]
      ,[name] AS [StatisticName]
      ,STATS_DATE([object_id], [stats_id]) AS [StatisticUpdateDate]
FROM sys.stats 

And here is the result. This proves that my statistics are out up date.

And another example, I want to check statistics for a specific table:

SELECT OBJECT_NAME(object_id) AS [ObjectName]
      ,[name] AS [StatisticName]
      ,STATS_DATE([object_id], [stats_id]) AS [StatisticUpdateDate]
FROM sys.stats where OBJECT_NAME(object_id) like '%AQT_INVENTORY_SNAPSHOT_SALE_DIS%'



Refer: http://basitaalishan.com/2013/04/15/determining-when-statistics-were-last-updated-in-sql-server/

0 comments:

Post a Comment

 
Toggle Footer