对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千万级数据量的优化方法积累__初级菜鸟
-----------------------------------------------------------------------------———————-------------- ...
随机推荐
- 【第二十篇】-Maven IntelliJ之Spring Cloud直播商城 b2b2c电子商务技术总结
Maven IntelliJ IntelliJ IDEA 已经内建了对 Maven 的支持.我们在此例中使用的是 IntelliJ IDEA 社区版 11.1. IntelliJ IDEA 的一些特性 ...
- project read error(项目读取错误)
maven的pom文件出现project read error 1,打开电脑cmd操作界面,在cmd界面找到打开出错项目的文件夹; 比如我的项目文件夹在D:\>eclipse-jee-file\ ...
- Python增强下git那长长的指令
场景 现如今有点规模的公司都使用GitFlow模式进行分支管理.虽然插件给我们带来了非常大的方便,但切换分支.找分支.起分支还是那么的麻烦 需求 在社会主次国家,每个生活在底层的劳动人民,他们默默的工 ...
- jenkins+requests+pytest+allure持续集成
环境搭建参考:https://www.jianshu.com/p/fc39030d057f 总体流程:
- Jmeter集合点技术
集合点简介 好比小学时候做广播体操,先让大家集合,等到时间统一开始做体操. 创建集合点 同步定时器 同时签到 注意:作用域 参数设置 用户数 为0 具体数值,不能大于 超时时间 为0,没有超时时间 具 ...
- web带宽估算方法
每个连接约占用10Kb的带宽,以3万总用户数和10%的在线率计算,并按照10%的冗余率,服务器总带宽=每秒总连接数*10Kbps /(1-冗余率)/1024. 带宽占用(Mbps)=30000*10% ...
- [转载]用redis实现跨服务器session
地址:http://blog.chinaunix.net/uid-11121450-id-3284875.html 这个月我们新开发了一个项目,由于使用到了4台机器做web,使用dns做负载均衡, 上 ...
- Python语句,表达式的区别?
参考了网上的文章,说 表达式的结果是值,对象 比如1+2, 是表达式 具体根据运算符不同有算术,逻辑,比较等等类型的表达式 语句是控制程序走向,不产生值 例如if/else等 参考: https:// ...
- P4428-[BJOI2018]二进制【树状数组,set】
正题 题目链接:https://www.luogu.com.cn/problem/P4428 题目大意 长度为\(n\)的\(0/1\)串要求支持 修改一个位置 求区间\([l,r]\)有多少个子区间 ...
- 03-Jwt在.netcore中的实现
1)jwt的加密解密过程 jwt验证的核心就是加密解密的过程,掌握了这个过程,也就掌握了jwt的原理.jwt的三部分中,header和payload是明文的,能够直接读出来,签名Signature部分 ...