问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何优化delete语句

发布网友 发布时间:2022-05-06 14:29

我来回答

2个回答

懂视网 时间:2022-05-06 18:51

接到客户的邮件,说生产环境中执行某一条delete sql语句的时间超过了3个小时。最后客户无奈取消了这次数据清理,准备今天在申请时

今天刚上上班,就接到客户的邮件,说生产环境中执行某一条delete sql语句的时间超过了3个小时。最后客户无奈取消了这次数据清理,,准备今天在申请时间重做。所以希望我在下午之前能够调优一下sql语句。

我拿到sql语句。是一个简单的delete语句,这个表是一个分区表,表中的数据大约有6亿条,要删除的数据大概有900多万条。

delete event
where cycle_code = 25
and cycle_month = 2
and cycle_year = 2015
and customer_id = 5289835;
先来看看执行计划
Plan hash value: 2439880320
-----------------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Pstart| Pstop |
-----------------------------------------------------------------------------------------------------------------------
| 0 | DELETE STATEMENT | | 3238K| 135M| 404K (1)| 01:20:52 | | |
| 1 | DELETE | EVENT | | | | | | |
| 2 | PARTITION RANGE ITERATOR | | 3238K| 135M| 404K (1)| 01:20:52 | 241 | 261 |
|* 3 | TABLE ACCESS BY LOCAL INDEX ROWID| EVENT | 3238K| 135M| 404K (1)| 01:20:52 | 241 | 261 |
|* 4 | INDEX RANGE SCAN | EVENT_1UQ | 1370K| | 40255 (1)| 00:08:04 | 241 | 261 |
-----------------------------------------------------------------------------------------------------------------------
发现走了索引扫描,看起来性能也不会差到哪去啊?
从整体来看,从6亿条记录中删除900多万条数据,走索引扫描感觉感觉确实是不错的选择。

首先查看了表的分区规则和基本的数据分布情况,
分区规则是基于cycle_code,cycle_month,sub_partition_id这三个字段,从查询条件来看,cycle_code,cycle_month刚好就是分区字段。
TABLE_NAME PARTITION PARTITION_COUNT COLUMN_LIST PART_COUNTS SUBPAR_COUNT STATUS
-------------------- --------- --------------- ------------------------------ ----------- ------------ ------
EVENT RANGE 721 CYCLE_CODE,CYCLE_MONTH,SUB_PAR TITION_ID 3 0 VALID
数据分布的情况如下,根据分区逻辑,数据只可能在这20个分区中。
partition_name high_value tablespace_name num_rows
C25_M2_S1 25, 2, 5 DATAH01 84246910
C25_M2_S2 25, 2, 10 DATAH01 3427570
C25_M2_S3 25, 2, 15 DATAH01 3523431
C25_M2_S4 25, 2, 20 DATAH01 3988140
C25_M2_S5 25, 2, 25 DATAH01 2700687
C25_M2_S6 25, 2, 30 DATAH01 2477792
C25_M2_S7 25, 2, 35 DATAH01 2490349
C25_M2_S8 25, 2, 40 DATAH01 11755212
C25_M2_S9 25, 2, 45 DATAH01 3184953
C25_M2_S10 25, 2, 50 DATAH01 2656802
C25_M2_S11 25, 2, 55 DATAH01 4434668
C25_M2_S12 25, 2, 60 DATAH01 2776079
C25_M2_S13 25, 2, 65 DATAH01 2949885
C25_M2_S14 25, 2, 70 DATAH01 2837790
C25_M2_S15 25, 2, 75 DATAH01 6285172
C25_M2_S16 25, 2, 80 DATAH01 2743439
C25_M2_S17 25, 2, 85 DATAH01 3574228
C25_M2_S18 25, 2, 90 DATAH01 3600820
C25_M2_S19 25, 2, 95 DATAH01 7415434
C25_M2_S20 25, 2, 100 DATAH01 3446285

热心网友 时间:2022-05-06 15:59

delete语句一般在C++中和new语句成对儿使用,用来释放new语句分配的动态存储对象。为了防止遗漏delete语句的执行导致的内存泄漏问题,可以用auto_ptr, share_ptr等智能指针对象来管理new分配的对象,这时delete由智能指针对象来执行
那位高手帮忙看看下面这个SQL语句怎么优化。 DELETE * FROM t1 WHERE...

不要用not in, 用not exists,这样会快很多 你把语句都贴出来 not exists不能用 column not exits这样的写法,要把你的gdid字段传到里面的select里面做等式

sql怎么删除表中一行数据?

答案:使用SQL的DELETE语句可以删除表中的一行数据。详细解释:DELETE语句的基本用法 在SQL中,要删除表中的数据,最常用的方法就是使用DELETE语句。DELETE语句可以根据指定的条件删除表中的一行或多行数据。删除一行数据的操作 如果想删除表中的一个特定行,需要指定删除的条件。例如,假设有一个名为"stud...

delete、truncate、drop的区别有哪些,该如何选择

然后执行空间优化语句,以及执行后的表Size变化:再看看这张表的大小,就只剩下表结构size了。7、delete 操作是一行一行执行删除的,并且同时将该行的的删除操作日志记录在redo和undo表空间中以便进行回滚(rollback)和重做操作,生成的大量日志也会占用磁盘空间。2、truncate 1、truncate:属于数据库DDL定...

如何优化数据库提高数据库的效率

6. 使用内层限定原则,在拼写SQL语句时,将查询条件分解、分类,并尽量在SQL语句的最里层进行限定,以减少数据的处理量。7. 应绝对避免在order by子句中使用表达式。8. 如果需要从关联表读数据,关联的表一般不要超过7个。9. 小心使用 IN 和 OR,需要注意In集合中的数据量。建议集合中的数据不超过...

数据库的多表大数据查询应如何优化?

? 考虑数据库的优化器 2. 避免出现SELECT * FROM table 语句,要明确查出的字段。 3. 在一个SQL语句中,如果一个where条件过滤的数据库记录越多,定位越准确,则该where条件越应该前移。 4. 查询时尽可能使用索引覆盖。即对SELECT的字段建立复合索引,这样查询时只进行索引扫描,不读取数据块。 5. 在判断有无符合...

优化SQL有什么方法

Oracle使用了一个复杂的自平衡B-tree结构。通常,通过索引查询数据比全表扫描要快。当Oracle找出执行查询和Update语句的最佳路径时, Oracle优化器将使用索引。同样在联结多个表时使用索引也可以提高效率。另一个使用索引的好处是,它提供了主键(primary key)的唯一性验证。那些LONG或LONG RAW数据类型, 你可以...

springMVC+hibernate 使用 update方法和 delete方法不起作用,控制台也...

自己用SQL语句写一下,不要调用hibernate的方法,举个例子:1//this.getSession().delete(user);2this.getSession().createQuery("delete from User where id=?").setParameter(0, id).executeUpdate();把1句该为2句就对了 原因:不太清楚,可能是Hibernate优化的原因吧,那天有时间看看源码 ...

MSSQL里面建索引的问题

2. 索引的选择性比较低,查询优化器不利用索引。3. 在索引列上应用了函数,如你举的例子substring(A,100),使得索引列A不是SARG(Search Argument),查询优化器也不会利用索引。查询也要扫描整个表。还有其它方面的情况。。。尽量去掉不合适的、多余的索引,因为维护索引会影响insert, update,delete语句...

新特性解读 | MySQL 8.0 通用表达式(WITH)深入用法

例如,你可以利用WITH语句快速构造数据,如在表y1中插入100条记录,日期字段随机生成。它也能与UPDATE语句协同工作,实现对表数据的高效更新。在删除数据时,WITH DELETE可以用于条件删除,如选择删除所有奇数ID的行,但需注意,WITH表达式数据为只读,因此在多表删除操作中需谨慎。更为独特的是,WITH语句...

SQL Server 优化存储过程的方法有哪些

优化存储过程有很多种方法,下面介绍最常用的7种。1.使用SET NOCOUNT ON选项 我们使用SELECT语句时,除了返回对应的结果集外,还会返回相应的影响行数。使用SET NOCOUNT ON后,除了数据集就不会返回额外的信息了,减小网络流量。2.使用确定的Schema 在使用表,存储过程,函数等等时,最好加上确定的Schema...

oracle delete语句 delete删除语句 delete语句删除数据 数据库delete语句菜鸟 oracle update语句 mysql的语句优化 怎么优化sql语句 select语句 优化语句
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
父母离异的话,会不会导致孩子心智不成熟? 过节 公司给我们发的购物卡 这个怎么做分录 属于福利费吗 需要计提吗... 乡村振兴公务员和省考公务员有什么区别 ...小时候跟着爷爷学国画书法,小受家是农村的,小受姓夏或叶,他带着他... 瑞麒X1安全装置 瑞麒X1的舒适型和豪华型有什么区别?配置有哪些不同的地方?这5000块多在... 瑞麒X1的安全性能方面配置如何? 脚崴了 有大量於血 怎么样才能快速消肿 脚崴了外侧出现瘀血浮肿怎么消除? ...换了我喜欢的发型,但是穿了件有点透明的衣服,可以看到肩_百度... 快乐英语怎么说 wenku 想问问开心蛙快乐英语是怎样的活动啊? 如何用word画一幅二叉树图啊? 电脑word文档怎么画线 我的QQ皮肤里面怎么没有透明度设置啊? qq皮肤设置透明度在哪; 使用分类语言对信息进行描述和标引,主要是可以把什么的信息集中在一起 皮肤透明度在哪里设置 语言种类 分类语言的特点 这个内存条和影驰a320m龙将兼容吗? 锐龙A320主板挑内存吗? AMD R3 2200+华擎A320主板必须得安两条内存条吗? amd-r5 1600+技嘉a320-ds3配什么内存条 a320支持2666赫兹内存条吗? 用手机支付宝钱包转账能用信用卡吗 支付宝可以转用信用卡的钱吗 昂达a320v全固版支持什么内存 高中生社区服务日记 分类语言的检索途径有哪些 长条迷你粽子的那个立体三角该怎么折? 二年级《快乐英语》的有关资料 快乐英语翻译 淘宝买东西超过花呗限额可以吗?如果一个东西3200,花呗额度只有3000,可以3000花呗加200 借呗没有额度。花呗除了在淘宝买东西可以用。其他有些不能付款。商家一次最多100元 我的世界怎么进入末影世界 我的世界怎么去末影界 我的世界里怎么传送到末影世界 卷发女适合什么发型图片 如何去末影世界。 都说中经是国企,是真的吗? 中工经联企业服务有限公司怎么样? 杨宝东的分管工作 关于CAD2014 渲染异常问题 各科老师点名的规律有哪些? CAD 渲染的问题 求助 CAD渲染的问题 保定市的市长和副市长都叫什么? cad的渲染效果可以去掉吗 SQL语句题 假设学生选课数据库关系模式如下:Student(SNo,SName,SAge,SDept)。。。