MySQL连接即使在索引之后也很慢
我有两张表格,分别是members和dep,其描述如下:MySQL连接即使在索引之后也很慢,mysql,performance,left-join,Mysql,Performance,Left Join,我有两张表格,分别是members和dep,其描述如下: TABLE members: +-----------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+------------+------+-----+---------+-------+ | MemberID_M
TABLE members:
+-----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------+------+-----+---------+-------+
| MemberID_M | varchar(8) | YES | MUL | NULL | |
| Age | varchar(5) | YES | | NULL | |
| Sex | varchar(1) | YES | | NULL | |
| SomeInfo | int(11) | YES | | NULL | |
+-----------------+------------+------+-----+---------+-------+
TABLE dep:
+-----------------+------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+------------+------+-----+---------+-------+
| MemberID_t | int(11) | YES | MUL | NULL | |
| YEAR | varchar(2) | NO | | | |
| Days | tinyint(4) | YES | | NULL | |
| train | bigint(20) | NO | | 0 | |
+-----------------+------------+------+-----+---------+-------+
我要执行以下查询:
CREATE TABLE table2
SELECT a.*,b.*
FROM dep AS a LEFT OUTER JOIN members AS b
ON a.MemberID_t = b.Memberid_M;
最初,两个表中的ID都没有索引,并且查询在几个小时内没有返回。现在,即使在索引之后,它也需要很多时间
EXPLAIN for the SELECT part of the query is:
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
| 1 | SIMPLE | a | ALL | NULL | NULL | NULL | NULL | 436689 | |
| 1 | SIMPLE | b | ALL | memid2 | NULL | NULL | NULL | 226127 | |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
问题是MemberID\u M是varchar,MemberID\u t是INT 这个字段的转换为什么需要这么长时间
为了获得最佳结果,关键字段必须是基于不同类型的列连接的相同类型。一个是INT,另一个是VARCHAR。这可能会导致在转换上花费大量时间(不确定MySQL是否也会基于此忽略键)
更重要的是,在主键中使用空值合乎逻辑吗?非常感谢!成功了。我在看其他优化,却忽略了这一点。太棒了。从4秒降到0.0022秒!这有多酷?谢谢@Kickstart!它们不是主键。