對SQLServer錯誤使用聚集索引的優化案例(千萬級數據量)


前言:

半個月前發了文章 SQLServer聚集索引導致的插入性能低

終於等到生產環境休整半天,這篇文章是對前文的實際操作。 

以下正文開始:


異常:近期發現偶爾有新數據插入超時。                                                       

分析:插入條碼有多種規則,導致數據表頁面重排,造成性能劇烈下降。                                                       

解決方案:

將基於Barcode的聚集索引更改到ID聚集索引(使新數據始終在尾部添加,避免數據頁面重排),

以損失微量Barcode查詢性能,換取大幅度提升新數據插入性能。     

                                                                                            

為避免緩存干擾,進行了4次測試:

1,優化前(Barcode聚集), ID查詢。

2,重啟,Barcode查詢。

3,優化后(ID聚集),重啟,ID查詢。

4,重啟,Barcode查詢。

 

以下是基於隨機10條數據的測試用例:    

                                                       

----使用ID索引查詢:                                                   

SELECT *    FROM  [MESDATANow].[dbo].[BarcodeMain]  where ID in

(38126797,37116727,39113797,39116797,37116297

,37116397,37112797,37114797,37113797,37119797)                                                      

Go    

  SELECT *        FROM [MESDATANow].[dbo].BarcodeRecord                                                   

  where ID in (116522700,116527024,116528753,113409209

,113410162,112678638,112679077  ,112942761,112943627,112942850                                               

       ,112943727,116530104,116531318,114035125,114036196)                                                      

                                                      

----使用Barcode索引查詢:                                                 

  SELECT *        FROM [MESDATANow].[dbo].[BarcodeMain]                                                    

  where Barcode in ('LS-21351005000408748','CH2LCHBM13523153AU'

,'CH2LCHKM1351210AEM','CH2LCHKM1351210APG', 'CH2LCHKM1351210AR0','CH2LCHKM13512107FU'

,'LS-21351005000406516','LASLCHWM13721104XF',  'BROLCHBM1391110258','CH2LCHKM1386210DV3')                     

go                                                  

SELECT *  FROM [MESDATANow].[dbo].BarcodeRecord          Where Barcode in ('LS-21351005000408748'

,'CH2LCHBM13523153AU','CH2LCHKM1351210AEM','CH2LCHKM1351210APG'

, 'CH2LCHKM1351210AR0','CH2LCHKM13512107FU','LS-21351005000406516','LASLCHWM13721104XF',                          

         'BROLCHBM1391110258','CH2LCHKM1386210DV3')          

 

數據表

數據量

聚集索引

用Barcode查詢

用ID查詢

讀取次數

耗時(ms)

讀取次數

耗時(ms)

BarcodeMain

7165446行

Barcode (前)

438

36

468

42

ID (后)

488

32

412

27

BarcodeRecord

15752004行

Barcode (前)

176

28

444

35

ID (后)

296

31

236

19

 



 

 

 

 

 

 

 

 

結論: 達到預期目的,耗時增加在可接受范圍。

(應用主要基於Barcode查詢,基於ID的查詢性能大幅提升無實際意義)                                    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM