0

実行に時間がかかる場合があるクエリがあります。遅さは無関係かもしれませんが、これをより効率的にするために何ができるかを確認したかったのです。

user テーブルには約 40,000 行あります。コード テーブルには約 30,000 行あります。user_id と code は一意の値です。

SELECT * 
FROM `user`, code 
WHERE `user`.user_id = code.user_id 
AND code.code = '50816ef96210415d1cad824bdb43';

code.user_id フィールドにインデックスを設定しました。他にできることはありますか?ここに他のインデックスを配置する必要がありますか?

そのクエリの EXPLAIN からの出力:

>> +----+-------------+-------+--------+---------------+---------+---------+----------------------+-------+-------------+
>> | id | select_type | table | type   | possible_keys | key     | key_len | ref                 | rows  | Extra       |
>> +----+-------------+-------+--------+---------------+---------+---------+----------------------+-------+-------------+
>> |  1 | SIMPLE      | code | ALL    | user_id       | NULL    | NULL    | NULL                 35696 | Using where | 
>> |  1 | SIMPLE      | user  | eq_ref | PRIMARY       | PRIMARY | 4       | mydb.code.user_id |     1 |             | 
>> +----+-------------+-------+--------+---------------+---------+---------+----------------------+-------+-------------+
>> 2 rows in set (10.11 sec)
4

2 に答える 2

3

code.codeまた、user.user_idフィールドにインデックスを追加する必要があり、飛行を開始する必要があります

于 2012-11-16T07:18:01.467 に答える
2

code.code にインデックスを追加する以外に、必要な列のみを選択することもできます ( SELECT * を使用するのは好きではありません)。

于 2012-11-16T07:21:03.170 に答える