即使在索引后 MySQL 加入速度也很慢

标签 mysql performance left-join

我有两个表 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_M 是一个 varchar 而 MemberID_t 是一个 INT

这个字段的转换是为什么要花这么长时间

为了获得最佳结果,关键字段必须是同一类型

关于即使在索引后 MySQL 加入速度也很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13034163/

相关文章:

sql - 左连接,但仅使用记录一次

php - 为什么我的 PHP 没有连接到我的 MySQL 数据库?

php - MySQL 一对多关系

2行之间的PHP friend 关系?

java - 为 Android 应用程序创建列表的最有效方式

java - C3P0首选测试查询配置

mysql - SQL 使用 LEFT JOIN 优化 "IS NULL"查询

没有root权限的Mysql

xml - Windows Phone 7 - 加载一个大的 xml 文件

MySQL - 左加入......在......喜欢