对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千万级数据量的优化方法积累__初级菜鸟
-----------------------------------------------------------------------------———————-------------- ...
随机推荐
- React项目中应用TypeScript
一.前言 单独的使用typescript 并不会导致学习成本很高,但是绝大部分前端开发者的项目都是依赖于框架的 例如和vue.react 这些框架结合使用的时候,会有一定的门槛 使用 TypeScri ...
- MySQL查询结果集字符串操作之多行合并与单行分割
前言 我们在做项目写sql语句的时候,是否会遇到这样的场景,就是需要把查询出来的多列,按照字符串分割合并成一列显示,或者把存在数据库里面用逗号分隔的一列,查询分成多列呢,常见场景有,文章标签,需要吧查 ...
- Oracle体系结构二
- php图片处理库
<?php namespace app\common\library; /** * include 'imagick.class.php'; $image = new lib_image_ima ...
- Alex网络结构
AlexNet网络结构 网络包含8个带权重的层:前5层是卷积层,剩下的3层是全连接层.最后一层全连接层的输出是1000维softmax的输入,softmax会产生1000类标签的分布网络包含8个带 ...
- TP6出现错误 No input file specified.
解决办法是打开public下的.htaccess文件, 把:RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] 改为:RewriteRule ^(.*)$ index ...
- Git 访问慢 解决办法
1. 查询Git最快的IP 通过 https://www.ipaddress.com/ 这个网站来获取当前github最新的ip分别获取以下两个域名的IP地址: 可以在访问git网站使用F12查询哪个 ...
- JS高级面试题思路(装箱和拆箱、栈和堆、js中sort()方法、.js中Date对象中的getMounth() 需要注意的、开发中编码和解码使用场景有哪些)
1.装箱和拆箱: 装箱:把基本数据类型转化为对应的引用数据类型的操作: var num = 123 // num var objNum = new Num(123) // object console ...
- Jmeter扩展组件开发(3) - 实现方法
继承JavaSamplerClient,四种实现方法讲解 前提 JavaSamplerClient要把四种实现方法都继承,编译器才不会报错. com.demo(package包)右键新建一个secon ...
- Jmeter系类(31) - JSR223(1) | 控件介绍
JSR233 介绍 JSR223控件执行JSR223脚本代码用于创建/更新所需的某些变量 JSR223可以使用其内置的变量,有助于精简脚本,提高开发测试的效率 由于JSR223脚本编译方式基本相同,J ...