当我探索这个时:
EXPLIAN SELECT m.*,m.id AS mid FROM movie_category mc
LEFT JOIN movie m ON m.id=mc.movie_id
RIGHT JOIN movie_area ma ON ma.movie_id=mc.movie_id
LEFT JOIN area a ON a.id=ma.area_id
LEFT JOIN category c ON c.id=mc.category_id
WHERE 1 and ma.area_id>0
GROUP BY mid
ORDER BY m.read_count desc LIMIT 0,36;
我得到了这个结果:
+----+-------------+-------+------------+--------+-----------------+----------+---------+----------------------+-------+----------+---------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+--------+-----------------+----------+---------+----------------------+-------+----------+---------------------------------+
| 1 | SIMPLE | ma | NULL | ALL | NULL | NULL | NULL | NULL | 15545 | 100.00 | Using temporary; Using filesort |
| 1 | SIMPLE | mc | NULL | ref | movie_id | movie_id | 5 | flask.ma.movie_id | 2 | 100.00 | NULL |
| 1 | SIMPLE | m | NULL | eq_ref | PRIMARY,year_id | PRIMARY | 4 | flask.ma.movie_id | 1 | 100.00 | NULL |
| 1 | SIMPLE | a | NULL | eq_ref | PRIMARY | PRIMARY | 4 | flask.ma.area_id | 1 | 100.00 | Using index |
| 1 | SIMPLE | c | NULL | eq_ref | PRIMARY | PRIMARY | 4 | flask.mc.category_id | 1 | 100.00 | Using index |
+----+-------------+-------+------------+--------+-----------------+----------+---------+----------------------+-------+----------+---------------------------------+
5 rows in set, 1 warning (0.00 sec)
如何优化此查询?我真的不知道该怎么做,帮帮我。
编辑: 从解释结果来看,第一行的额外是"使用临时;使用filesort",并不好。第二行的Extra和第三行的Extra都是NULL,也不好。
PS: 查询跨度0.91秒,非常糟糕。如何添加索引来证明查询速度。
答案 0 :(得分:1)
改进架构
如果没有看到涉及的模式,我将假设您有两个多对多映射表(mc,ma),它们的定义效率低下。
遵守规则here;你会获得一些效率。
摆脱不必要的表格
查询中并未真正使用 function abc(sender, args) {
var Imagename = args.get_fileName();
alert(Imagename );
}
和category
,因此请将其从查询中删除。
我认为这是一个“生成”的查询?然后让这一代变得更加复杂!