对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的查询性能大幅提升无实际意义)
对SQLServer错误使用聚集索引的优化案例(千万级数据量)的更多相关文章
- SQLServer中重建聚集索引之后会影响到非聚集索引的索引碎片吗
本文出处:http://www.cnblogs.com/wy123/p/7650215.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- (转载)MYSQL千万级数据量的优化方法积累
转载自:http://blog.sina.com.cn/s/blog_85ead02a0101csci.html MYSQL千万级数据量的优化方法积累 1.分库分表 很明显,一个主表(也就是很重要的表 ...
- SQLServer之添加聚集索引
聚集索引添加规则 聚集索引按下列方式实现 PRIMARY KEY 和 UNIQUE 约束 在创建 PRIMARY KEY 约束时,如果不存在该表的聚集索引且未指定唯一非聚集索引,则将自动对一列或多列创 ...
- MySQL 千万 级数据量根据(索引)优化 查询 速度
一.索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让 ...
- mysql千万级数据量根据索引优化查询速度
(一)索引的作用 索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经 ...
- 在SQLSERVER中创建聚集索引
CREATE CLUSTERED INDEX CLUSTER_id ON TABLE_name(ID)------批量
- MySQL索引优化(索引三表优化案例)
建表SQL phone.book表建立索引 [关联优化查询建议] 1.保证被驱动表的join字段已经被索引 被驱动表 join 后的表为被驱动表 (需要被查询) 2.left join 时,选择小 ...
- MYSQL千万级数据量的优化方法积累
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- BayaiM__MYSQL千万级数据量的优化方法积累__初级菜鸟
-----------------------------------------------------------------------------———————-------------- ...
随机推荐
- go实现堆排序、快速排序、桶排序算法
一. 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法.以大堆为例利用堆顶记录的是最大关键字这一特性,每一轮取堆顶元素放入有序区,就类似选择排序每一轮选择一个最大值放入有序区,可以把堆排序看成是 ...
- 从 1 开始学 JVM 系列 | JVM 类加载器(一)
从 1 开始学 JVM 系列 类加载器,对于很多人来说并不陌生.我自己第一次听到这个概念时觉得有点"高大上",觉得只有深入 JDK 源码才会触碰到 ClassLoader,平时都是 ...
- 猪齿鱼 SaaS 版效能平台发布
日前,猪齿鱼Choerodon全场景效能平台Saas版发布,提供体系化方法论和协作.测试.DevOps及容器工具,帮助企业拉通需求.设计.开发.部署.测试和运营流程,一站式提高管理效率和质量.从团队 ...
- 对象赋值在PHP中到底是不是引用?
之前的文章中,我们说过变量赋值的问题,其中有一个问题是对象在进行变量赋值的时候,直接就是引用赋值.那么到底真实情况是怎样呢? 之前变量赋值的文章 PHP的变量赋值 对象引用测试 在继续深入的学习PHP ...
- vue跳转路由
1. router-link 1. 不带参数 <router-link :to="{name:'home'}"> <router-link :to=" ...
- js判断访客来源网址和关键字
加入现在有A.B两个站,A为友站,B为我站. 希望判断使用从A站连来时,就把访问者拒绝在门外,只要用简单几行的javascript,就可抓到使用的来源,以及作出一些防范的措施. <script ...
- Docker系列(22)- DockerFile指令说明并构建自己的centos
DockerFile常用指令 实战测试 DockerHub中99%镜像都是从这个基础镜像过来的FROM scratch,然后配置需要的软件和配置来进行构建 #创建一个自己的centos # 1.编写D ...
- PHP 流行的框架
Aura Laravel Symphony Yii Zend php components Packagist 最好的组件: Awesome PHP https://www.yiiframework. ...
- python对象引用和垃圾回收
变量="标签" 变量a和变量b引用同一个列表: >>> a = [1, 2, 3] >>> b = a >>> a.appen ...
- P5437-[XR-2]约定【拉格朗日差值,数学期望】
正题 题目链接:https://www.luogu.com.cn/problem/P5437 题目大意 \(n\)个点的完全图,连接\(i,j\)的边权值为\((i+j)^k\).随机选出一个生成树, ...