【发布时间】:2021-04-22 07:25:56
【问题描述】:
我有这个查询,我想知道我是否可以通过某种方式对其进行优化,因为目前执行需要很长时间(比如 4/5 秒)
SELECT *
FROM `posts` ml INNER JOIN
posts_tag_one gt
ON gt.post_id = ml.id AND gt.tag_id = 15 INNER JOIN
posts_tag_two gg
ON gg.post_id = ml.id AND gg.tag_id = 5
WHERE active = '1' AND NOT ml.id = '639474'
ORDER BY ml.id DESC
LIMIT 5
我想说它有 600k+ 个帖子的数据库,posts_tag_one 500 万条记录,posts_tag_two 475k+ 条记录。
我给出的那个例子只有 2 个连接,但在某些情况下,我最多有 4 个连接,所以其他表有 300k-400k 条记录。
我正在为 posts_tag_one、posts_tag_two 表使用外键和索引,但查询仍然很慢。
任何建议都会有所帮助。谢谢!
【问题讨论】:
-
这些表上的索引是什么,如果有的话?还提供
explain结果 -
确认“active = 1”关联的是哪个表?含义是帖子表(ml 别名)
-
欢迎来到 SO。请参阅Why should I provide an MCRE for what seems to me to be a very simple SQL query - 并且仅选择(并正确限定)您实际想要返回的列。
-
此外,关于查询性能的问题总是需要给定查询的 EXPLAIN
标签: mysql sql optimization inner-join