作家
登录

我是如何在 SQL Server 中处理每天四亿三千万记录的?

作者: 来源: 2017-12-08 09:40:38 阅读 我要评论

<mgrobjid,dictionary</mgrobjid,dictionary

先按MgrObjId建立索引,索引大年夜小为550M,耗时5分25秒。结不雅,如上图的预估计整洁样,根本没有起感化,反而更慢了。

按多个前提建立索引

OK,既然膳绫擎的不可,那么我们按多个前提建立索引又若何?CREATE NONCLUSTERED INDEX Idx_His20141008>

等等,难道这就是索引的好处?花费7分25秒,用1.1G的空间换取来的就是这些?肯定是有什么处所纰谬了,于是开端翻查材料,查看一些相干书本,最终,有了较大年夜???进展。

这是给某数据中间做的一个项目,项目难度之大年夜令人发指,这个项目真正的让我感到到了,商场如疆场,而我只是个中的一个小兵,太多的┞方术,太多的高层之间的较劲,太多的内幕了。具体这个项目标情况,我有空再写相干的博文出来。

起首,我们须要明白几个索引的要点:

  • 索引之后,按索引字段反复起码的来排序,会达到最优的效不雅。以我们的表来说,如不雅建立了No的集合索引,把No放在where子句的第一位是最佳的,其次是Id,然后是MgrObjId,最后是时光,时光索引如不雅表是一个小时的,最好不要用 
  • where子句的次序决定了萌芽分析器是否应用索引来萌芽。比如建立了MgrObjId和Id的索引,那么where MgrObjId=’’ and Id=’’ and Dtime=’’就会采取索引查找,而where Dtime=’’ and MgrObjId=’’ and Id=’’则不必定会采取索引查找。 
  • 把风气引列的结不雅列放在包含列中。因为我细长件是MgrObjId和Id以及Dtime,是以返回结不雅中只需包含Dtime和Value即可,是以把Dtime和Value放在包含列中,返回的索引结不雅就有这个值,不消再查物理表,可以达到最优的速度。 

跟上述几点原则,我们建立以下的索引:CREATE NONCLUSTERED INDEX Idx_His20141008>

可以看到,这里完全应用了索引,没有额外的消费。而实际履行的结不雅,1秒都不到,竟然不消一秒就在1100w的记录中把结不雅筛选了出来!!帅呆了!!

  1. --优化之前 
  2.  DBCC FREEPROCCACHE 
  3. DBCC DROPCLEANBUFFERS SET STATISTICS IO ON  select Dtime , Value  from  dbo his20140825 WHERE  Dtime >= ''  AND  Dtime <= ''  AND  MgrObjId ''  AND Id ''  SET STATISTICS IO OFF  --优化之后  DBCC FREEPROCCACHE 
  4. DBCC DROPCLEANBUFFERS SET STATISTICS IO ON select Dtime , Value from  dbo his20140825 WHERE MgrObjId ''  AND  Id ''  AND Dtime >= ''  AND  Dtime <= ''  SET

      推荐阅读

      数据中心“中庸”是王道?康普新品助数据中心网络效用最大化

    开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 【51CTO.com原创稿件】数据中间的收集经由多年的演进>>>详细阅读


    本文标题:我是如何在 SQL Server 中处理每天四亿三千万记录的?

    地址:http://www.17bianji.com/lsqh/39583.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)