私の理解では、(My)SQL では、 aはすべての列でSELECT DISTINCT
a と同じことを行う必要がありますが、暗黙的な並べ替えを行うため、これら 2 つのクエリは同じである必要があります。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