明明有索引,为啥不会走到索引?

本文记录了一次处理MySQL数据库连表更新操作时遇到的性能瓶颈,通过调整字段属性,成功解决了因索引未被有效利用导致的更新速度缓慢问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近再做一次连表更新的操作。主表15w数据。从表是1000w左右的数据。

sql如下:

UPDATE `iae_deliverysuccess_balance_2019_03` iae
  LEFT JOIN `orderbalancestate` obs on iae.`orderno`= obs.`orderNo`
SET iae.`balanceNo`  = obs.`sellerBalanceNO` 
 WHERE obs.`type`= 3
   AND obs.`isDelete`= 0;

其中关键字段都是有索引的。
在这里插入图片描述
另外一张表也是有索引的。其实这个按自己以往的经验会是很快的。5s内应该能更新完成。
EXPLAIN 看了下,发现也走了索引,但是关键连表字段的那个字段没有走索引。心里想这个 这次更新的数据量也不大,慢一点到时能接受的,就没想太多就直接执行了。
在这里插入图片描述

但是啊。。。。。巴特啊 。。。。我等了半小时,逼的我时不时的还得去看看时不时把我的数据库锁死了。我以为半小时已经到了极限了,差不多快好了。然鹅,我感觉他想奔着一小时去了。

快一小时了。我擦勒。6.30了。。。。下班了。我隐隐觉得这哪里会有问题。但是996是不存在的(主要是这个任务不着急o(∩_∩)o 哈哈)。

后面是第二天早上了,7.30.我又打开了数据库。EXPLAIN 一下,还是一样的。很无奈。

我一边执行一边打开这两个表查看一下,索引还是有都在的,我在网上看了说字段类型不一致会导致不走索引,这个一点我知道。但是我还是点开字段看了看,都是varchar,这个可以排除了。

忽然…
在这里插入图片描述吗的。这一点不一样。救命稻草啊!或许就里了,我试一哈。

ALTER TABLE `iae_deliverysuccess_balance_2019_03` 
	MODIFY COLUMN `orderno` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL AFTER `expressNo`;

ok。
EXPLAIN下
在这里插入图片描述对不起打扰了。
在这里插入图片描述。。索引的原理还是没了解到。空了我再查查资料吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值