Como o MariaDB Otimiza Cláusulas ORDER BY


Em alguns casos o MariaDB pode utilizar índices para satisfazer uma requisição de ORDER BY ou GROUP BY sem fazer uma ordenação extra.

O índice também pode ser usado mesmo se o ORDER BY não coincidir exatamente com o índice, uma vez que todas as partes de índices não usadas e todos os extras na coluna ORDER BY são constantes na cláusula WHERE. A seguinte consulta usará o índice para resolver a parte ORDER BY / GROUP BY:

SELECT * FROM t1 ORDER BY key_part1,key_part2,...
SELECT * FROM t1 WHERE key_part1=constante ORDER BY key_part2
SELECT * FROM t1 WHERE key_part1=constante GROUP BY key_part2
SELECT * FROM t1 ORDER BY key_part1 DESC,key_part2 DESC SELECT * FROM t1 WHERE key_part1=1 ORDER BY key_part1 DESC,key_part2 DESC

Alguns casos onde o MariaDB não pode usar índices para resolver o ORDER BY: (Note que o MariaDB ainda usará índices para encontrar o registro que coincide com a cláusula WHERE):

Nestes casos onde o MariaDB tem que ordenar o resultado, ele usa o seguinte algoritmo:

Você pode verificar com EXPLAIN SELECT ... ORDER BY se o MariaDB pode usar índices para resolver a consulta. Se você obtiver Using filesort na coluna extra, então o MariaDB não pode usar índices para resolver o ORDER BY. Leia "Sintaxe de EXPLAIN (Obter informações sobre uma SELECT)".

Se você quiser ter uma velocidade ORDER BY maior, primeiro você deve ver se você pode fazer que o MariaDB use índices em vez de fazer um fase de ordenação extra. Se não for possível, então você pode fazer:

Por padrão, o MariaDB ordena todas as consultas GROUP BY x,y[,...] como se você tivesse especificado ORDER BY x,y[,...]. Se você incluir a cláusula ORDER BY explicitamente, o MariaDB a otimizará sem qualquer penalidade na velocidade, embora a ordenacao ainda ocorra. Se a consulta inclui um GROUP BY mas você deseja evitar a sobrecarga da ordenar o resultado, você pode suprimir a ordenacao especificando ORDER BY NULL:

Retornar