Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL连接即使在索引之后也很慢_Mysql_Performance_Left Join - Fatal编程技术网

MySQL连接即使在索引之后也很慢

MySQL连接即使在索引之后也很慢,mysql,performance,left-join,Mysql,Performance,Left Join,我有两张表格,分别是members和dep,其描述如下: TABLE members: +-----------------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+------------+------+-----+---------+-------+ | MemberID_M

我有两张表格,分别是members和dep,其描述如下:

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!它们不是主键。