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

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

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

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

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

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

解决方案:

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

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

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

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

解决方案:

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

原文地址:https://www.cnblogs.com/yibao/p/14517857.html