2

次のような2つのテーブル 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 |       |
+----+-------------+-------+------+---------------+------+---------+------+--------+-------+
4

2 に答える 2

6

問題は、MemberID_M が varchar であり、MemberID_t が INT であることです。

このフィールドの変換に時間がかかる理由

最適な結果を得るには、キー フィールドが同じタイプである必要があります

于 2012-10-23T15:42:45.707 に答える
2

同じタイプではない列に基づいて結合しています。1 つは INT で、もう 1 つは VARCHAR です。これにより、おそらく変換に多くの時間が費やされます (MySQL がこれに基づいてキーを無視するかどうかも定かではありません)。

さらに細かい点ですが、主キーのように見えるものに NULL 値を含めることは論理的ですか?

于 2012-10-23T15:42:59.890 に答える