首页 > 解决方案 > MySQL - 如何优化此查询?

问题描述

我正在尝试生成所有用户标签的列表,其中包含与之关联的任务数...

SELECT * FROM 
 ( SELECT tags.tag_id, tags.tag_text, tags.type, task_tags.tag_id AS task_tag_id,
   count(task_tags.tag_id) AS TaskCount 
   FROM tags 
   LEFT JOIN task_tags ON tags.tag_id = task_tags.tag_id 
   WHERE tags.user_id = 2 
   GROUP BY tag_id ) 
AS temp_table ORDER BY tag_text

以下是解释结果:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra   
1   PRIMARY     <derived2>  ALL     NULL    NULL    NULL    NULL    13  Using filesort
2   DERIVED     tags    ref     user_tag    user_tag    4   const   13  Using where; Using temporary; Using filesort
2   DERIVED     task_tags   ref     tag_id  tag_id  4   taskmandb1234.tags.tag_id   1   Using index

标签: mysqlquery-optimization

解决方案


这是当您不选择列时的样子,task_tags.tag_id因为您没有对它进行分组或聚合。

   SELECT tags.tag_id, tags.tag_text, tags.type, 
          count(task_tags.tag_id) AS TaskCount 
   FROM tags 
   LEFT JOIN task_tags ON tags.tag_id = task_tags.tag_id 
   WHERE tags.user_id = 2 
   GROUP BY tags.tag_id, tags.tag_text, tags.type
   ORDER BY tags.tag_text

除此之外,请确保您有钥匙tags.user_idtags.tag_text


推荐阅读