我有两个表:A - 301 列(第一个名为 a1 int(11) 主键,第 2 到第 301 - double(15,11))和 B - 33 列(第一个 - b1 int(11) 唯一键,第二个一 - b2 varchar(100) 主键, ... , 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 < pos+1000;
对于 b33 <= 600,000 的值,查询需要 1-5 秒。之后,查询开始需要 20-30 秒。当 b33 >= 8,000,000 时,查询开始需要 60-70 秒。我不明白为什么会出现放缓。b33 已编入索引,连接发生在一个表中定义为主键且在另一个表中唯一的键上。有解决方法吗?这确实妨碍了代码的速度,如果没有其他方法,我将不得不将表 A 和 B 拆分为几个较小的表。我真的希望我不必那样做!请帮忙!
编辑:这是解释的 o/p -
** * ** * ** * ** * * 1. row * ** * ** * ** * ** *
id: 1
select_type: SIMPLE
table: B
type: range
possible_keys: b1,b33
key: b33
key_len : 4
ref: NULL
rows: 981
Extra: 使用 where
* ** * ** * ** * ** * 2. row * ** * ** * *** ** *
id: 1
select_type: SIMPLE
table: A
type: eq_ref
possible_keys: PRIMARY
key: PRIMARY
key_len: 4
ref: DBName.B.b1
rows: 1
Extra:
2 rows in set (0.00 sec)