Spec-Zone .ru
спецификации, руководства, описания, API

8.13.15. DISTINCT Оптимизация

DISTINCT объединенный с ORDER BY нуждается во временной таблице во многих случаях.

Поскольку DISTINCT может использовать GROUP BY, изучите, как MySQL работает со столбцами в ORDER BY или HAVING пункты, которые не являются частью выбранных столбцов. См. Раздел 12.17.3, "MySQL Extensions к GROUP BY".

В большинстве случаев, a DISTINCT пункт можно рассмотреть как особый случай GROUP BY. Например, следующие два запроса эквивалентны:

SELECT DISTINCT c1, c2, c3 FROM t1WHERE c1 > const;SELECT c1, c2, c3 FROM t1WHERE c1 > const GROUP BY c1, c2, c3;

Из-за этой эквивалентности, оптимизация, применимая к GROUP BY запросы могут быть также применены к запросам с a DISTINCT пункт. Таким образом, для большего количества деталей о возможностях оптимизации для DISTINCT запросы, см. Раздел 8.13.14,"GROUP BY Оптимизация".

Объединяясь LIMIT row_count с DISTINCT, MySQL останавливается, как только он находит row_count уникальные строки.

Если Вы не используете столбцы от всех таблиц, названных в запросе, MySQL прекращает сканировать любые неиспользованные таблицы, как только он находит первое соответствие. В следующем случае, предполагая это t1 используется прежде t2 (с которым можно свериться EXPLAIN), MySQL прекращает читать из t2 (для любой определенной строки в t1) когда это находит первую строку в t2:

SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;