zoukankan      html  css  js  c++  java
  • sql优化实战:从1353秒到135秒(删除索引+修改数据+重建索引)

    最近在优化日结存储过程,日结存储过程中大概包含了20多个存储过程。

    发现其有一个存储过程代码有问题,进一步发现结存的数据中有一个 日期字段business_date 是有问题的,这个字段对应的类型是varchar,但是存储过程传入参数的类型是char,导致最后结存进去的数据末尾多了几个空格。

    比如,应该是'2016-12'的,但现在是'2016-12  '。


    为了解决这个问题,要修改这个字段的值,去掉尾部的空格,于是运行如下语句:

    update TB_CUSTOMER_FROZEN
    set BUSINESS_DATE = rtrim(BUSINESS_DATE)

    运行结果:

    (10483163 row(s) affected)

    数据量1000w左右,运行时间22分33秒,也就是1253秒,真的是太慢了。。。


    这么慢肯定是有原因的。

    于是看了一下原来表中有2个索引,一个聚集索引(business_date字段),一个非聚集索引(也包含了business_date字段),相当于每次修改数据的同时也要修改索引值,这才是慢的原因。

    想想,可以先删除索引,然后更新数据,在重建索引,最后总耗时:6秒+1分29秒+60秒 = 135秒。

    总结:

    这个快的原因是批量化操作,不是每次修改一条数据就去修改索引,而是删除索引,这样修改数据也不会涉及到索引,然后批量修改数据,之后重建索引也是一个批量化的操作,所以速度才快的。

  • 相关阅读:
    PostgreSQL configure: error: readline library not found
    JS实现的模态框弹窗并自动消失
    MySQL安装详细教程
    C++与C#中枚举的区别
    句柄
    RESTFul API
    四、使用ADB命令清除缓存
    C#枚举案例
    Pycharm安装教程
    七、Monkey实战
  • 原文地址:https://www.cnblogs.com/momogua/p/8304392.html
Copyright © 2011-2022 走看看