了解EXPLAIN基于创建列索引

时间:2016-06-04 13:50:45

标签: mysql indexing explain

我有这个update查询:

explain UPDATE
qanda AS ans1
JOIN qanda AS ans2 ON ans2.related = ans1.related
JOIN qanda AS ques ON ans2.related = ques.id
SET ans1.acceptedanswer = IF( ans1.id <> 3, 0, IFNULL( ans1.acceptedanswer, 0 ) ^ b'1' ),
ans1.aadate = IF( ans1.id <> 3, ans1.aadate, 4353)
WHERE ques.author_id = 29
AND ans2.id = 3
AND ans2.author_id = 31 
AND (ques.amount IS NULL or ans1.acceptedanswer IS NULL)

这是EXPLAIN

的结果
+------+-------------+-------+-------+---------------------------+---------+---------+-------+------+-------------+
| id   | select_type | table | type  |       possible_keys       |   key   | key_len | ref   | rows | Extra       |
+------+-------------+-------+-------+---------------------------+---------+---------+-------+------+-------------+
|    1 | SIMPLE      | ans2  | const | PRIMARY,author_id,related | PRIMARY | 4       | const | 1    | NULL        |
|    2 | SIMPLE      | ques  | const | PRIMARY,author_id         | PRIMARY | 4       | const | 1    | NULL        |
|    3 | SIMPLE      | ans1  | ALL   | related                   | NULL    | NULL    | NULL  | 4    | Using where |
+------+-------------+-------+-------+---------------------------+---------+---------+-------+------+-------------+

应该注意我的表只包含4行数据。

我的结构好吗?或者我应该在这样的列上创建这样的索引吗?

1 个答案:

答案 0 :(得分:0)

同一张桌子上有问题和多个答案吗?这似乎是错误的#39;建议一个表格提问,一个表格提供答案。

SHOW CREATE TABLE会有所帮助。

思考&#34;复合&#34;索引...

INDEX(author_id, id)(按此顺序)可能会有用。

我怀疑你的JOINans1是不正确的(在业务逻辑意义上,不是在SQL意义上);检查一下。