gpt4 book ai didi

mysql - 使用具有连接的子查询计算行索引,导致 A*B 检查行

转载 作者:行者123 更新时间:2023-11-29 00:04:40 26 4
gpt4 key购买 nike

这个问题源 self 之前开始的一个问题:Incorrect row index when grouping

由于性质不同,我在这里提问,一旦我解决了这个问题,我会在那里提供答案。


我想到了子查询,想出了这个:

SELECT
mq.*,
@indexer := @indexer + 1 AS indexer
FROM
(
SELECT
p.id,
p.tag_id,
p.title,
p.created_at
FROM
`posts` AS p
LEFT JOIN
`votes` AS v
ON p.id = v.votable_id
AND v.votable_type = "Post"
AND v.deleted_at IS NULL
WHERE
p.deleted_at IS NULL
GROUP BY
p.id
) AS mq
JOIN
(SELECT @indexer := 0) AS i

这确实有效,我得到了想要的结果:

+----+--------+------------------------------------+---------------------+---------+
| id | tag_id | title | created_at | indexer |
+----+--------+------------------------------------+---------------------+---------+
| 2 | 2 | PostPostPost | 2014-10-23 23:53:15 | 1 |
| 3 | 3 | Title | 2014-10-23 23:56:13 | 2 |
| 4 | 2 | GIFGIFIGIIF | 2014-10-23 23:59:03 | 3 |
| 5 | 2 | GIFGIFIGIIF | 2014-10-23 23:59:03 | 4 |
| 6 | 4 | My new avatar | 2014-10-26 22:22:30 | 5 |
| 7 | 5 | Hi, haiii, oh Hey ! | 2014-10-26 22:38:10 | 6 |
| 8 | 6 | Mclaren testing stealth technology | 2014-10-26 22:44:15 | 7 |
| 9 | 7 | Just random thoughts while pooping | 2014-10-26 22:50:03 | 8 |
+----+--------+------------------------------------+---------------------+---------+

现在的问题是...我运行了一个EXPLAIN 查询,以查看它的运行速度。而且,我有一个真正困扰我的数字:

Abnormally high row count.

嗯,数字很明显:252 * 1663 = 419076

不过,这让我很担心 - 那里的行数是否正常,或者我必须优化查询?如果是这样,那么我该如何优化这个?

最佳答案

作为 MySQL version 5.7所有连接都被视为嵌套循环连接。

MySQL resolves all joins using a nested-loop join method. This means that MySQL reads a row from the first table, and then finds a matching row in the second table, the third table, and so on.

所以要回答您的问题...不,您将无法对该行进行倒计时。但是,通过向连接列添加索引,您可以获得更快的结果,但您的行数将保持不变。

关于mysql - 使用具有连接的子查询计算行索引,导致 A*B 检查行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28098454/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com