Suponha que você tenha a seguinte tabela e dados:
create table t (
k int,
v int,
index k(k)
) engine=memory;
insert into t (k, v)
values (10, 1),
(10, 2),
(10, 3);
Ao emitir select * from t where k = 10
sem order by
cláusula, como o MySQL classifica os registros por padrão?
Repostando minha resposta para uma pergunta semelhante sobre o SQL Server:
Então, respondendo sua pergunta:
ORDER BY
. Fazer qualquer outra coisa é se preparar para surpresas indesejadas.Esta é uma propriedade de todo o SQL, não apenas do MySQL. O texto relevante na especificação SQL-92 é:
Existem pedaços de texto semelhantes na especificação para cursores.
A ordem das linhas na ausência de
ORDER BY
cláusula pode ser:A inserção é desordenada, caótica, na chegada. O índice que é criado tem ordem onde os elementos são inseridos no local apropriado na lista encadeada que é o índice. Pense em uma lista triplamente vinculada para um índice, onde você tem um link de avanço de um elemento de índice para o próximo, um link para trás para fins de travessia e integridade e, em seguida, um conjunto de ponteiros para os registros reais na tabela que corresponder ao elemento indexado em questão.
Dados reais, caóticos no armazenamento. Índice associado aos dados, ordenados em armazenamento e construção. A extração real de dados, ordenada ou não ordenada, depende da consulta envolvida.