前言:

半个月前发了文章 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的查询性能大幅提升无实际意义)

对SQLServer错误使用聚集索引的优化案例(千万级数据量)的更多相关文章

  1. SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗

    本文出处:http://www.cnblogs.com/wy123/p/7650215.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  2. (转载)MYSQL千万级数据量的优化方法积累

    转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...

  3. SQLServer之添加聚集索引

    聚集索引添加规则 聚集索引按下列方式实现 PRIMARY KEY 和 UNIQUE 约束 在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创 ...

  4. MySQL 千万 级数据量根据(索引)优化 查询 速度

    一.索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让 ...

  5. mysql千万级数据量根据索引优化查询速度

    (一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...

  6. 在SQLSERVER中创建聚集索引

    CREATE CLUSTERED INDEX CLUSTER_id ON TABLE_name(ID)------批量

  7. MySQL索引优化(索引三表优化案例)

    建表SQL phone.book表建立索引 [关联优化查询建议] 1.保证被驱动表的join字段已经被索引 被驱动表  join 后的表为被驱动表  (需要被查询) 2.left join 时,选择小 ...

  8. MYSQL千万级数据量的优化方法积累

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  9. BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟

      -----------------------------------------------------------------------------———————-------------- ...

随机推荐

  1. go实现堆排序、快速排序、桶排序算法

    一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法.以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是 ...

  2. 从 1 开始学 JVM 系列 | JVM 类加载器(一)

    从 1 开始学 JVM 系列 类加载器,对于很多人来说并不陌生.我自己第一次听到这个概念时觉得有点"高大上",觉得只有深入 JDK 源码才会触碰到 ClassLoader,平时都是 ...

  3. 猪齿鱼 SaaS 版效能平台发布

    ​日前,猪齿鱼Choerodon全场景效能平台Saas版发布,提供体系化方法论和协作.测试.DevOps及容器工具,帮助企业拉通需求.设计.开发.部署.测试和运营流程,一站式提高管理效率和质量.从团队 ...

  4. 对象赋值在PHP中到底是不是引用?

    之前的文章中,我们说过变量赋值的问题,其中有一个问题是对象在进行变量赋值的时候,直接就是引用赋值.那么到底真实情况是怎样呢? 之前变量赋值的文章 PHP的变量赋值 对象引用测试 在继续深入的学习PHP ...

  5. vue跳转路由

    1.  router-link 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to=" ...

  6. js判断访客来源网址和关键字

    加入现在有A.B两个站,A为友站,B为我站. 希望判断使用从A站连来时,就把访问者拒绝在门外,只要用简单几行的javascript,就可抓到使用的来源,以及作出一些防范的措施. <script ...

  7. Docker系列(22)- DockerFile指令说明并构建自己的centos

    DockerFile常用指令 实战测试 DockerHub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建 #创建一个自己的centos # 1.编写D ...

  8. PHP 流行的框架

    Aura Laravel Symphony Yii Zend php components Packagist 最好的组件: Awesome PHP https://www.yiiframework. ...

  9. python对象引用和垃圾回收

    变量="标签" 变量a和变量b引用同一个列表: >>> a = [1, 2, 3] >>> b = a >>> a.appen ...

  10. P5437-[XR-2]约定【拉格朗日差值,数学期望】

    正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 \(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\).随机选出一个生成树, ...