今天使用sqlserver2008的“Database Engine Tuning Advisor”在對一個sql進行最佳化時, 索引建議裡給出如下建議目標:
--CREATE STATISTICS
CREATE STATISTICS [_dta_stat_1758629308_16_10_1] ON [dbo].[PrmOrderPromiseTime]([DistributionId], [StoreId], [OrderId])
-- 包含索引
CREATE NONCLUSTERED INDEX [_dta_index_PrmOrderSiteActualTime_6_1582628681__K1_2_7] ON [dbo].[PrmOrderSiteActualTime]
(
[OrderId] ASC
)
INCLUDE ( [SiteId],
[ActualSiteId]) WITH (SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [PRIMARY]
尤其是create statistics,粗略地瞭解了下。 如下知識來自csdn:
1.STATISTICS是一個表中某幾個列的統計資訊,如一個表是全校學生某次考試的分數,score列的類型是int,取值範圍是0到100的整數,那麼statistc就是每個分數分別有多少人。在一個特定的查詢中,使用索引可能加快速度,也可能減慢速度,所以SQL server要事先對使用索引的效果做一個預測,預測的依據就是STATISTICS。
2.預設情況下,表或索引更改了,統計會相應地自動更新,以保持統計是最新的。但是可以在資料庫選項中關閉這個自動更新的功能,提高資料表的更新速度。但需要定期手動更新統計。因為到期的統計資訊會對是否使用索引的判斷帶來誤判。沒發現SQL2000和SQL2005的統計有什麼區別。
3.index要依賴正確的STATISTICS才能發揮作用。而你的SQL2005最佳化工具對缺乏STATISTIC的列自動產生了建立語句。
具體可在msdn上尋求協助http://msdn.microsoft.com/zh-cn/library/ms188038(SQL.105).aspx、http://msdn.microsoft.com/zh-cn/library/bb510669.aspx
sql方面要學的東西太多了,以後還需耐心的繼續學習。