天天看點

SqlServer插入慢的問題解決

這個是我加入的QQ群裡面一個網友問的問題。他說一個表做一個INSERT都會逾時。正困惑呢,向群裡面的人求助。我剛好對這方面知道點,就回答了說要優化聚集索引。他不明白具體該怎麼做,似乎也不知道什麼是聚集索引。我對他說你可以看看你插入記錄時的磁盤IO是否比較多,他說他的磁盤已經換成了RAID,不好檢視磁盤IO。OK, 我繼續替他分析道: 你那個insert慢是因為你每次插新記錄,資料庫伺服器都要在中間的一個位置插入,引起磁盤檔案的大量讀寫. 他說: 如何解決?  我的硬體配置已經沒法更新了. 我說: 你可以看看聚集索引, 要優化聚集索引. 他似乎不太明白, 寫了下面這寫東西:

是這個嗎:

use WanerSoft2007

declare @table_id int

set @table_id=object_id('dbo.Ws_UserProInfo')

dbcc showcontig(@table_id)

dbcc dbreindex('dbo.Ws_UserProInfo','',0)

我看了一下, 說這是重做索引的批處理,不是聚集索引.我繼續說道:聚集索引是指記錄的實體擺放次序即按照聚集索引來做的。是最重要的一個索引,聚集索引設計的好,多種資料庫操作都可以獲得好的性能。設計的不好就會引起性能上的巨大差異, 比如插入操作, 設計得好時,新記錄隻需要在實體的最後添加就可以了,不需要移動很多記錄,是以快,設計得不好時,新記錄就是在實體上的中間某個位置插入,那麼就必須移動很多記錄,就會有大量的磁盤IO。他去找了一會,回來給我貼了個圖:

SqlServer插入慢的問題解決

我看了圖,對他說聚集索引要選用短的字段,還要單向遞增,可以選日期,identity等。他這回就明白了,問是不是聚集索引裡面去掉bookid和nclassid字段. 我說是,他照做了,後來回來說,太好了,問題解決了。