我有两个表:A - 301列(第一个名为a1 int(11)主键,第二个到第301个 - 双(15,11))& B - 33列(第一个 - b1 int(11)唯一键,第二个 - b2 varchar(100)主键,...,33rd - b33 int(11)MUL)。Mysql select on indexded column slowdown on large tables
A & B有~13,500,000条记录。
我的MySQL查询:对于POS的每一个值,在设定的POS(1,1000,2000,...,1350),1000的倍数:
选择A. *,B2,B5 ,b7,b8,b10,b13,b33来自a1 = b1上的A join B,其中b33> = pos和b33 < pos + 1000;
对于b33 < = 600,000的值,查询需要1-5秒。之后,查询开始花费20-30秒。当b33> = 8,000,000时,查询开始以60-70s开始。我不明白为什么发生放缓。 b33被编入索引,并且连接发生在一个表中被定义为主键且在另一个表中唯一的键上。有没有解决方法?这实际上阻碍了代码的速度,如果没有其他作用,我将不得不将表A & B分成几个较小的表。我真的希望我不必这样做!请帮忙!
编辑:这里是的O/P说明 -
** * ** * ** * ** * * 1行* ** * ** * ** * ** *
ID:1个
SELECT_TYPE:SIMPLE
表:乙
类型:范围
possible_keys:B1,B33
键:B33
key_len:4
REF:NULL
行:981
额外:使用其中
* ** * ** * ** * ** * 2。行* ** * ** * ** * ** *
ID:1个
SELECT_TYPE:SIMPLE
表:一个
类型:eq_ref
possible_keys: PRIMARY
key:PRIMARY
key_len:4
ref:DBName.B.b1
行:1
附加:
2行中集(0.00秒)
那么你有一个特定的价值> 600,000的性能突然从5秒降到20秒? – 2011-06-06 06:42:54
不,我更喜欢一个范围。发布650,000这是一场噩梦。 – ayesha129 2011-06-07 09:02:07
我想这是解释慢速输出的输出。而快速的?有相同的输出吗? – Samuel 2011-06-07 12:27:24