【发布时间】:2011-09-09 01:31:46
【问题描述】:
我有两个表:A - 301 列(第一个名为 a1 int(11) 主键,第 2 到第 301 个 - double(15,11))和 B - 33 列(第一个 - b1 int(11) 唯一Key, 2nd One - b2 varchar(100) Primary Key, ... , 33rd - b33 int(11) MUL)。
A 和 B 都有约 13,500,000 条记录。
我的 mysql 查询:对于 pos 的每个值,将 pos 设置为 (1, 1000, 2000, ..., 13500000) 中的 1000 的倍数:
select A.*, b2, b5, b7, b8, b10, b13, b33 from A join B on a1=b1 where b33 >= pos and b33
对于 b33 = 8,000,000 时,查询开始需要 60-70 秒。我不明白为什么会出现放缓。 b33 已编入索引,连接发生在一个表中定义为主键且在另一个表中唯一的键上。有解决方法吗?这确实妨碍了代码的速度,如果没有其他方法,我将不得不将表 A 和 B 拆分为几个较小的表。我真的希望我不必那样做!请帮忙!
编辑:这是 EXPLAIN 的 o/p -
************* 1. 行 ********** em>***
编号:1
选择类型:简单
表:B
类型:范围
可能键:b1,b33
键:b33
key_len: 4
参考:空
行数:981
额外:使用 where
************ * 2. 行 *************
编号:1
选择类型:简单
表:A
类型:eq_ref
可能的键:主要
键:初级
key_len: 4
参考:DBName.B.b1
行数:1
额外:
2 行(0.00 秒)
【问题讨论】:
-
那么您是否有一个特定的值 > 600,000,其性能突然从 ~5s 下降到 ~20s?
-
没有。我有更多的范围。发布 650,000 是一场噩梦。
-
我想这是慢速解释的输出。还有那个快的?有相同的输出吗?
标签: mysql select join indexing slowdown