我有一个MySQL(MariaDB,更精确)的数据库,它包含不同的“记录”(不要与数据库记录混淆,这些是我的系统使用的数据单位,由多个键值字段组成)。 每个“记录”是“实例”的一部分。 每个“实例是一个的一部分‘用户组记录‘可以是一部分‘类别’由于使用了错误的INDEX导致的GROUP BY BY查询速度慢
我想写检索所有类别的用户组的SQL查询’ 每一个。’ - 和检索。中存在的所有实例每个类别下的记录量 我的SQL语句是这样的:
SELECT COUNT(r.id) AS records_number, c.category
FROM records r
INNER JOIN feeds_instances i ON r.instance = i.id
INNER JOIN feeds_instances_categories c ON c.instance = i.id
WHERE i.user_group = '0'
AND r.reviewed IS NULL
GROUP BY c.category
LIMIT 0 , 30
当测试与SQL_NO_CACHE查询,我得到了0.2+秒查询时取出GROUP BY,它减少到0.0008秒 当我对SQL查询执行EXPLAIN命令时,得到用于表c的索引是“实例”而不是“categor y“(feeds_instances_categories表有三列:id,instance,category。指标上实例和类)存在。
我想强制GROUP BY使用索引类别。我尝试使用USE INDEX命令,但我得到错误。我很可能没有正确地做,并且无法在文档中找到正确的方法。
任何帮助,将不胜感激!
我删除了SQL Server标记,因为它不支持“LIMIT”。 –
会'选择{} yourFields从feeds_instances_categories℃的内部JOIN feeds_instances我ON i.id = c.instance INNER JOIN记录R ON r.instance = {i.id它的其余部分}'帮助吗? – Terminus