我正在使用对四个表执行三个表连接的 MySQL 查询。其中两个连接在一对 MUL 键上。第三个连接是在一对主键上。查询需要整整一分钟才能获取 100 行。
我相信两对 MUL 密钥都是独一无二的;所以我想知道,如果这些键被索引为唯一的,或者被制成外键,我会注意到显着的性能提升吗?
MUL 键上的连接可能是这里的罪魁祸首吗?
编辑
好的,这是架构。我用字母代替了实际的表/列名。
mysql> 描述表 A; +-----------------+------------------+------+--- --+---------+----------------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +-----------------+------------------+------+--- --+---------+----------------+ | 键 | int(10) 无符号 | 否 | 优先级 | 空 | 自动增量 | | 麦键 | int(10) 无符号 | 否 | 穆尔 | 空 | | | 一个 | int(10) 无符号 | 否 | | 空 | | | 乙 | int(10) 无符号 | 否 | | 空 | |
mysql>描述表B; +-----------------+------------------+------+--- --+---------+----------------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +-----------------+------------------+------+--- --+---------+----------------+ | 键 | int(10) 无符号 | 否 | 优先级 | 空 | 自动增量 | | mkey1 | int(10) 无符号 | 否 | 穆尔 | 空 | | | mkey2 | int(10) 无符号 | 否 | 穆尔 | 空 | | | 一个 | int(10) 无符号 | 否 | | 空 | | | 乙 | int(10) 无符号 | 否 | | 空 | | | c | int(10) 无符号 | 否 | | 空 | |
mysql>描述表C; +---------------+------------------+------+-----+- --------+--------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +---------------+------------------+------+-----+- --------+--------+ | 键 | int(10) 无符号 | 否 | 优先级 | 空 | | | 麦键 | varchar(128) | 否 | 穆尔 | 空 | |
mysql> 描述表 D; +---------------+------------------+------+-----+- --------+--------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +---------------+------------------+------+-----+- --------+--------+ | 键 | int(10) 无符号 | 否 | 优先级 | 空 | | | 麦键 | varchar(128) | 否 | 穆尔 | 空 | |
询问:
select
A.a, A.b, B.c, A.mkey, C.pkey, D.mkey
from
A, B, C, D
where
A.pkey=C.pkey and
A.mkey=B.mkey1 and
B.mkey2=D.pkey and
B.a <= A.a and
B.b >= A.b
D.mkey in ('str1', 'str2', ...);
返回 77 行。