DISTINCT
combined with ORDER
BY
needs a temporary table in many cases.
Note that because DISTINCT
may use
GROUP BY
, you should be aware of how MySQL
works with columns in ORDER BY
or
HAVING
clauses that are not part of the
selected columns. See Sección 12.10.3, “GROUP BY
con campos escondidos”.
In most cases, a DISTINCT
clause can be
considered as a special case of GROUP BY
. For
example, the following two queries are equivalent:
SELECT DISTINCT c1, c2, c3 FROM t1 WHERE c1 >const
; SELECT c1, c2, c3 FROM t1 WHERE c1 >const
GROUP BY c1, c2, c3;
Due to this equivalence, the optimizations applicable to
GROUP BY
queries can be also applied to
queries with a DISTINCT
clause. Thus, for
more details on the optimization possibilities for
DISTINCT
queries, see
Sección 7.2.11, “Cómo optimiza MySQL los GROUP BY
”.
When combining LIMIT
with
row_count
DISTINCT
, MySQL stops as soon as it finds
row_count
unique rows.
If you don't use columns from all tables named in a query, MySQL
stops scanning the not-used tables as soon as it finds the first
match. In the following case, assuming that
t1
is used before t2
(which you can check with EXPLAIN
), MySQL
stops reading from t2
(for any particular row
in t1
) when the first row in
t2
is found:
SELECT DISTINCT t1.a FROM t1, t2 where t1.a=t2.a;
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.