mysql - 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
解决方案
这是当您不选择列时的样子,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_id
和tags.tag_text
。
推荐阅读
- javascript - Vuetify 中的滚动列表
- ios - 验证检查后使用 Prepare 执行 Segue
- oracle - 将每个日期范围转换为每天的行 Oracle
- java - 如何接收来自特定号码的短信?
- angular - Angular 5 - HttpClient 调用重新触发
- ubuntu - Ubuntu 16.04 为 Android 编译 VLC 失败
- file-upload - 如何在zend框架3中上传之前修改图像名称
- java - Java收银机程序
- sql - 在sql中获取日历周ID
- python - Django - 将 google recaptcha v2 添加到登录表单