小编Tim*_*Tim的帖子

即使EXPLAIN显示良好的计划,MySQL也会加入慢速查询

我有以下场景:在MySQL数据库中,我有2个MyISAM表,一个有420万行,另一个有3.2亿行.以下是表的架构:

表1(4.2M行)

F1 INTEGER UNSIGNED NOT NULL PRIMARY KEY
f2 varchar(40)
f3 varchar(40)
f4 varchar(40)
f5 varchar(40)
f6 smallint(6)
f7 smallint(6)
f8 varchar(40)
f9 varchar(40)
f10 smallint(6)
f11 varchar(10)
f12 tinyint(4)
f13 smallint(6)
f14 text
Run Code Online (Sandbox Code Playgroud)

表2(320M行)

F1 INTEGER UNSIGNED NOT NULL PRIMARY KEY
f2 INTEGER UNSIGNED NOT NULL
Run Code Online (Sandbox Code Playgroud)

表2位于不同的数据库中,但我使用的是查询这两个表的存储过程.两个表之间的关系是Table1.F1可能最多约.Table2.F1(外键)中的100行匹配,并且将为这些匹配的键返回Table2.f2的值.我在表1上有一个索引IX1(f2(15),f3(10))和表2中的索引IX2(F1,f2)和IX3(f2)

我正在运行的查询如下:

SELECT g.F1
FROM DB1.Table1 g 
INNER JOIN DB2.Table2 gp ON g.F1 = gp.F1 
WHERE (gp.f2 = 452677825) AND
(g.f2 = 'A string value') LIMIT 0,56
Run Code Online (Sandbox Code Playgroud)

此查询有时非常快(<1s),但更改g.F2所比较的字符串值会导致查询甚至超过11秒甚至30秒.我不明白为什么会这样.以下是执行SELECT的EXPLAIN的输出.

1, 'SIMPLE', 'g', 'ref', …
Run Code Online (Sandbox Code Playgroud)

mysql performance join sql-execution-plan

5
推荐指数
1
解决办法
1265
查看次数

标签 统计

join ×1

mysql ×1

performance ×1

sql-execution-plan ×1