【发布时间】:2021-09-04 00:56:13
【问题描述】:
我在 MySQL
中有一个多对多关系数据库还有这个查询:
SELECT main_id FROM posts_tag
WHERE post_id IN ('134','140','187')
GROUP BY main_id
HAVING COUNT(DISTINCT post_id) = 3
此表中有 ~5,300,000 行,并且该查询似乎很慢,例如 5 秒(如果我在搜索中添加更多 id 则更慢)
我想问有没有什么方法可以让它更快?
顺便说一句,我想添加更多条件,例如 NOT IN 和可能的 JOIN 具有相同结构但数据不同的新表。不太像这样,但首先我想知道是否有任何方法可以使这个简单的查询更快?
任何建议都会有所帮助,甚至是另一种方法或结构等。
PS:硬件是 Intel Core i9 3.6Ghz,64GB RAM,480GB SSD。所以我认为服务器规格不是问题。
【问题讨论】:
-
不慢,你的查询好像返回了78003行,很多。这是预期的结果吗?
-
基本上不是,没有 EXPLAIN 它只返回 64 行,这是预期的结果。我真的不知道为什么会显示那些 78003。可能这就是检查的数量...
-
请发布 A) SHOW CREATE TABLE posts_tag 的 TEXT 结果;和 B) 显示表状态,其中名称如“posts_tag”;进行分析。
-
@alexfsk EXPLAIN 中的 78003 是返回 SELECTion 的“检查的行数”。
-
@WilsonHauck A) prnt.sc/1rdt264 B) prnt.sc/1rdsnxf
标签: mysql performance having database-indexes