这个问题来自我之前开始的问题: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
查询,看看它有多快。而且,我在那里有一个真正困扰我的数字:
嗯,数字显而易见:252 * 1663 = 419076
。
这让我很担心 - 那里的行数正常,或者我必须优化查询?如果是这样,那我该如何优化这个呢?
答案 0 :(得分:1)
从MySQL version 5.7开始,所有连接都被视为嵌套循环连接。
MySQL使用嵌套循环连接方法解析所有连接。这意味着MySQL从第一个表中读取一行,然后在第二个表,第三个表中找到匹配的行,依此类推。
所以回答你的问题......不,你将无法让这一行倒计时。但是,通过向连接列添加索引,您可以获得更快的结果,但行数将相同。