MySQL 5.5 复合主键的索引问题

红薯 发布于 2010/07/08 10:44
阅读 2K+
收藏 10

最近将 MySQL 数据库从 5.1 升级到 5.5 碰到了一个疑难问题:

同样一个存储过程的执行,在 5.1 需要 2-3 分钟,而到了 5.5 居然花了四个多小时才执行完毕

经历了几天的排查终于发现了导致执行慢的原因是复合主键没有索引的问题。

例如有个表 t1 ,定义了一个复合主键 f1 和 f2

那么当我们对 t1 表做查询或者是更新的时候,都是以 f1 和 f2 做条件来进行的

例如 UPDATE t1 SET f3 = ? WHERE f1=? AND f2=?

这在 MySQL 5.1 下是没有任何性能问题的

但是在 MySQL 5.5 下,情况变得非常糟糕

SQL语句的执行变成了全表扫描,复合主键完全起不到效果

最后单独为这两个字段建立索引后,同一个语句执行的速度提升了50倍左右,问题得以解决。

加载中
1
JavaGG
JavaGG

我日,差这么远的较率

0
27号
27号

最后单独为这两个字段建立索引后,同一个语句执行的速度提升了50倍左右,问题得以解决。

------------------

提升了2~3分钟的50倍?还是4个小时的50倍?

0
红薯
红薯

引用来自#3楼“27号”的帖子

最后单独为这两个字段建立索引后,同一个语句执行的速度提升了50倍左右,问题得以解决。

------------------

提升了2~3分钟的50倍?还是4个小时的50倍?

当然是4个小时的50倍,这是一个后台执行的任务,涉及数据量很大,要求在几分钟内完成。

0
27号
27号

引用来自#4楼“红薯”的帖子

引用来自#3楼“27号”的帖子

最后单独为这两个字段建立索引后,同一个语句执行的速度提升了50倍左右,问题得以解决。

------------------

提升了2~3分钟的50倍?还是4个小时的50倍?

当然是4个小时的50倍,这是一个后台执行的任务,涉及数据量很大,要求在几分钟内完成。

4个小时的50倍,还没有原来的5.1快呢。。。。

0
红薯
红薯

引用来自#5楼“27号”的帖子

引用来自#4楼“红薯”的帖子

引用来自#3楼“27号”的帖子

最后单独为这两个字段建立索引后,同一个语句执行的速度提升了50倍左右,问题得以解决。

------------------

提升了2~3分钟的50倍?还是4个小时的50倍?

当然是4个小时的50倍,这是一个后台执行的任务,涉及数据量很大,要求在几分钟内完成。

4个小时的50倍,还没有原来的5.1快呢。。。。

大概的数字,说的就是有这么回事。

0
xianwu13
xianwu13

看来还是要参考执行计划啊,不然跟想象的差别很大

返回顶部
顶部