0

我有一个查询,有时似乎需要很长时间才能运行。缓慢可能无关紧要,但我想检查可以做些什么来提高效率。

用户表有大约 40k 行。代码表有大约 30k 行。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.codeuser.user_id字段上添加索引,它应该开始飞行

于 2012-11-16T07:18:01.467 回答
2

除了为 code.code 添加索引之外,您可以做的另一件事是仅选择您需要的列(我不喜欢使用 SELECT *)

于 2012-11-16T07:21:03.170 回答