0

初心者の質問があります。次のテーブルを作成するとします。

温度1

アップ、varchar(15)

dn、varchar(15)

いくつかのインデックスを追加します。

create table temp1 (up varchar(15), dn varchar(15), index id1(up), index id2(dn))

テーブルにランダム データを入力した後、次の Explain Select を実行します。

explain select * from temp1 as t1, temp1 as t2 where t1.up = t2.up

そして得る

+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+
|  1 | SIMPLE      | t1    | ALL  | id1           | NULL | NULL    | NULL |    4 |             |
|  1 | SIMPLE      | t2    | ALL  | id1           | NULL | NULL    | NULL |    3 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+------+-------------+

オプティマイザーがキーを使用しないのはなぜですか?! 非常に単純なものが欠けているに違いありません。. .

(私が実際に使用しているテーブル(700K行)を使用した同様のクエリの実行が非常に遅く、インデックスに関係していると推測しているため、この質問をしています)。

助けてくれてありがとう!

4

2 に答える 2

1

temp t1 (および t2 のほぼすべて) からすべての行を選択するため、mysql は fullscan を使用することを決定します。これは、そのような場合により適しているためです。

于 2011-01-24T07:18:20.240 に答える
0

私が間違っている場合は修正してください。ただし、これはテーブル temp1 のすべての値を返します。何かのサブセットを探しているわけではないため、インデックスを使用しても役に立ちません。

于 2011-01-24T07:31:46.917 に答える