我的理解是,在(My)SQL 中,a应该在所有列上SELECT DISTINCT
做与 a 相同的事情,除了隐式排序,所以这两个查询应该是相同的:GROUP BY
GROUP BY
SELECT boardID,threadID FROM posts GROUP BY boardID,threadID ORDER BY NULL LIMIT 100;
SELECT DISTINCT boardID,threadID FROM posts LIMIT 100;
他们都给了我相同的结果,并且他们给出了相同的输出EXPLAIN
:
+----+-------------+-------+------+---------------+------+---------+------+---------+-----------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+---------+-----------------+
| 1 | SIMPLE | posts | ALL | NULL | NULL | NULL | NULL | 1263320 | Using temporary |
+----+-------------+-------+------+---------------+------+---------+------+---------+-----------------+
1 row in set
但是在我的桌子上,查询DISTINCT
始终会立即返回,而查询则GROUP BY
需要大约 4 秒。我已禁用查询缓存来测试这一点。
有 25 列,所以我也尝试创建一个单独的表,其中只包含boardID 和 threadID 列,但同样的问题和性能差异仍然存在。
我必须使用GROUP BY
而不是DISTINCT
这样我才能包含其他列,而不会将它们包含在DISTINCT
. 所以现在我不知道如何进行。为什么有区别?