Spec-Zone .ru
спецификации, руководства, описания, API
|
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;