- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实战:上亿数据如何秒查
最近在忙着优化集团公司的一个报表。优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查的质变。从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助。数据背景首先项目是西门子中国在我司实施部署的MES项目,由于项目是在产线上运作(3 years+),数据累积很大。在项目的数据库中,大概上亿条数据的表有5个以上,千万级数据的表10个以上,百万级数据的表,很多...(历史问题,当初实施无人监管,无人监控数据库这块的性能问题。ps:我刚入职不久...)不多说,直接贴西门子中国的开发人员在我司开发的SSRS报表中的SQL语句: View Code这个查询语句,实际上通过我的检测和调查,在B/S系统前端已无法查出结果,半小时,一小时 ... 。因为我直接在SQL查询分析器查,半小时都没有结果。(原因是里面对一张上亿级数据表和3张千万级数据表做全表扫描查询)不由感慨,西门子中国的素质(或者说责任感)就这样?下面说说我的分析和走的弯路(思维误区),希望对你也有警醒。探索和误区首先相关表的索引,没有建全的,把索引给建上。索引这步完成后,发现情况还是一样,查询速度几乎没有改善。后来想起相关千万级数据以上的表,都还没有建立表分区。于是考虑建立表分区以及数据复制的方案。这里有必要说明下:我司报表用的是一个专门的数据库服务器,数据从产线订阅而来。就是常说的“读写分离”。如果直接在原表上建立表分区,你会发现执行表分区的事物会直接死锁。原因是:表分区操作本身会锁表,产线还在推数据过来,这样很容易“阻塞”,“死锁”。我想好的方案是:建立一个新表(空表),在新表上建好表分区,然后复制数据过来。正打算这么干。等等!我好像进入了一个严重的误区!分析: 原SQL语句和业务需求,是对产线的数据做产品以及序列号的追溯,关键是查询条件里没有有规律的条件(如日期、编号), 贸然做了表分区,在这里几乎没有意义!反而会降低查询性能!好险!还是一步一步来,先做SQL语句分析。一. 对原SQL语句的分析1. 查询语句的where条件,有大量@var in ... or (@var =) 的片段2. where条件有like %+@var+% 3. where条件有 case ... end 函数4. 多次连接同一表查询,另外使用本身已嵌套的视图表,是不是必须,是否可替代?5. SQL语句有*号,视图中也有*号出现二. 优化设计首先是用存储过程改写,好处是设计灵活。核心思想是:用一个或多个查询条件(查询条件要求至少输入一个)得到临时表,每个查询条件如果查到集合,就更新这张临时表,最后汇总的时候, 只需判断这个临时表是否有值。以此类推,可以建立多个临时表,将查询条件汇总。这样做目前来看至少两点好处:1.省去了对变量进行 =@var or (@var=)的判断; 2.抛弃sql拼接,提高代码可读性。再有就是在书写存储过程,这个过程中要注意:1. 尽量想办法使用临时表扫描替代全表扫描;2. 抛弃in和not in语句,使用exists和not exists替代;3. 和客户确认,模糊查询是否有必要,如没有必要,去掉like语句;4. 注意建立适当的,符合场景的索引;5. 踩死 * 号;6. 避免在where条件中对字段进行函数操作;7. 对实时性要求不高的报表,允许脏读(with(nolock))。三. 存储过程如果想参考优化设计片段的详细内容,请参阅SQL代码: 1 /**
2 * 某某跟踪报表
3 **/
4 --exec spName1 ,,,,,,公司代号
5 CREATE Procedure spName1
6 @MESOrderID nvarchar(320), --工单号,最多30个
7 @LotName nvarchar(700), --产品序列号,最多50个
8 @DateCode nvarchar(500), --供应商批次号,最多30个
9 @BatchID nvarchar(700), --组装件序列号/物料批号,最多50个
10 @comdef nvarchar(700), --组装件物料编码,最多30个
11 @SNCust nvarchar(1600), --外部序列号,最多50个
12 @OnPlant nvarchar(20) --平台
13 AS
14 BEGIN
15 SET NOCOUNT ON;
您可能关注的文档
最近下载
- 2025年从优秀村主干中考试录用乡镇街道机关公务员模拟试卷.docx VIP
- 微生物检验技士专业实践模拟试题1知识.doc VIP
- Unit 4 Seasons (说课稿)-2024-2025学年鲁科版五四制英语四年级上册.docx VIP
- 【工程文档】亮化工程技术交底.pdf VIP
- 客专联络线隧道临近既有线控制爆破施工专项方案116(分部控爆法 2013年).doc VIP
- 2025高考信息技术真题及答案2025.doc VIP
- 《自动化生产线安装与调试》课件——项目四 分拣站的安装与调试.pptx VIP
- 合同终止通知函8篇.docx VIP
- 华为公司人力资源管理纲要 总纲.docx VIP
- 川教版可爱的四川7至8年级 主题二 第5课《遍布四川的三国遗迹》 课件.pptx
原创力文档


文档评论(0)