zoukankan      html  css  js  c++  java
  • 对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的查询性能大幅提升无实际意义)                                    

  • 相关阅读:
    数据分析项目补充:医院药品销售数据分析
    会计实务会计分录——资产之流动资产篇
    HTTP请求过程和状态响应码
    网络爬虫深究-初识HTTP和https常识
    数字分析之一元线性回归及多元线性回归
    Navicat15激活(仅供学习使用,严禁任何商业用途)
    pandas补充(其二)与matplotlib补充
    pandas模块补充
    阿里云ecs服务器公网ip除了能telnet通22端口,其他如tomcat的8080端口telnet不通,原来需要添加安全组规则
    maven依赖里redis的依赖spring-boot-starter-data-redis和spring-boot-starter-redis有什么区别?
  • 原文地址:https://www.cnblogs.com/leavind/p/15490747.html
Copyright © 2011-2022 走看看