记两次线上出现的索引失效的问题

1、并发环境两个进程做update操作导致死锁

2、触发器中,由于字段类型转换引发的索引失效问题

以上两个问题的间接原因都是索引失效,进而引发全局扫描,使检索时间大大增加

 

1、并发环境两个进程做update操作导致死锁

场景:项目中有一张记录表单传签的记录表,包含表单单号、传签时间、审核人申请人等字段信息。目前表数据量已经达到160W笔。原先是有一个主键的聚集索引【包含表单单号、申请人、申请时间】。在某个时间这张表出现了死锁的情况。经过分析,得到死锁现场的重演:由于在同一时间,两位审核人进入系统同时点击审核。由于不同的日期,共用同一个单号,所以审核人单词的审核操作会修改多条记录。尝试用explain关键字分析update的检索条件。发现type字段是all,也就是出现了索引失效了。

解决方案:

【1】:移除垃圾历史资料                                                                                      

【2】:给单号字段添加非聚集索引。因为主键的聚集索引失效了,所以为了使单号索引生效,添加了非聚集索引。

2、触发器中,由于字段类型转换引发的索引失效问题

场景:由于使用了临时表,但是由于临时表与原始资料表该字段一个是char(10),一个是varchar(10),由于出现了类型转换,所以引发了索引失效。

解决方案:

【1】:直接将临时表的数据类型改为与资源表一致的就可以

posted @   Java民工陆小凤  阅读(116)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
历史上的今天:
2017-03-11 软件工程学习进度表02
点击右上角即可分享
微信分享提示