【发布时间】:2015-05-31 01:05:28
【问题描述】:
所以我有两张表,它们有一行共同 - `type`。此行在两个表中都是 KEY,并且两个表中的类型相同 - VARCHAR(4)。问题是,当我使用该列加入表时,EXPLAIN 使它看起来好像该列没有被用作键。
我的架构 + 数据:
CREATE TABLE demo (
id INT AUTO_INCREMENT,
`type` VARCHAR(4),
data VARCHAR(255),
PRIMARY KEY (id),
KEY `type` (`type`)
);
CREATE TABLE types (
id INT AUTO_INCREMENT,
`type` VARCHAR(4),
`desc` VARCHAR(255),
PRIMARY KEY (id),
KEY `type` (`type`)
);
INSERT INTO demo (type, data) VALUES ('AAAA','aaaa'),('AAAA','aaaa'),('BBBB', 'bbbb');
INSERT INTO types (type, `desc`) VALUES ('AAA','aaaa'),('BBBB','bbbb');
我的查询:
EXPLAIN SELECT *
FROM demo d
JOIN types t ON d.`type` = t.`type`;
根据 EXPLAIN,查询不是搜索 3x 行 (3*1) - 它必须搜索 6x 行 (3*2)。在我看来,它应该搜索 3x 行?
SQL 小提琴:
http://sqlfiddle.com/#!9/d6b69d/2
有什么想法吗?
谢谢!
【问题讨论】:
-
如果您没有足够的数据(例如 2-3 行),则使用索引进行过滤并进行额外查找以获取之后的所有行是不值得的。
-
给我们看
EXPLAIN;我们需要看到这一切。