sql优化实战:从1353秒到135秒(删除索引+修改数据+重建索引)
2023-09-11 14:19:23 时间
最近在优化日结存储过程,日结存储过程中大概包含了20多个存储过程。
发现其有一个存储过程代码有问题,进一步发现结存的数据中有一个 日期字段business_date 是有问题的,这个字段对应的类型是varchar,但是存储过程传入参数的类型是char,导致最后结存进去的数据末尾多了几个空格。
比如,应该是'2016-12'的,但现在是'2016-12 '。
为了解决这个问题,要修改这个字段的值,去掉尾部的空格,于是运行如下语句:
- update TB_CUSTOMER_FROZEN
- set BUSINESS_DATE = rtrim(BUSINESS_DATE)
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秒。
总结:
这个快的原因是批量化操作,不是每次修改一条数据就去修改索引,而是删除索引,这样修改数据也不会涉及到索引,然后批量修改数据,之后重建索引也是一个批量化的操作,所以速度才快的。
相关文章
- mysql索引合并:一条sql可以使用多个索引
- PS 图层后面有索引两字怎么办
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
- SQL查询优化:详解SQL Server非聚集索引(转载)
- SQL SERVER 2005 获取表的所有索引信息以及删除和新建语句
- [SQL] sql server中如何查看执行效率不高的语句
- EXPLAIN sql优化方法(1) 添加索引
- B+树及数据库索引的应用
- 数据库内核月报 - 2015 / 05-PgSQL · 社区动态 · 9.5 新功能BRIN索引
- 使用navicat for mysql 创建外键foreign keys时,总会自动创建索引indexs
- Spring Data ElasticSearch示例--查询索引库
- SQL有三个类型的索引,唯一索引 不能有重复,但聚集索引,非聚集索引可以有重复
- Atitit if else 选择决策流程ast对比 sql java 表达式类型 binaryExpression hase left and rit expr 目录 1.1. Sql1
- Atitit 大数据索引技术attilax总结 目录 1. 面临的问题2 1.1. 找到太多数据2 1.2. 不支持多字段搜索2 1.3. 不支持模糊搜索2 1.4. 聚合搜索2 1.5
- Atitit.数据索引 的种类以及原理实现机制 索引常用的存储结构
- 怎样能写出性能优良的SQL语句 从sql语句提高数据库的性能
- Python每日一练(数据分析篇)——第32天:数据索引
- SQL VQ11 找出sql类题目的单次最大刷题数
- SQL语句-创建索引
- 12.3.1 局部索引
- 【Leetcode刷题Python】852. 山脉数组的峰顶索引
- Mysql实战篇之怎么给字符串加索引--03
- sql的介绍——SQL Server数据库管理系统
- filebeat收集多个域名网站日志并存储到不同的es索引库(五)