Eu tenho uma tabela e estou sempre obtendo os dados ordenando uma coluna. No meu caso, eu peço por datenum
. No entanto, a seleção é tão lenta por causa do pedido.
É possível encomendar a mesa após datenum
. Esta coluna é definida como única. Se definido como um índice, a seleção seria mais rápida?
Se for lento, você pode
É possível realizar ORDER BY em uma tabela.
ALTER TABLE ... ORDER BY {colunas} ;
De acordo com a documentação do MySQL
Como o InnoDB realiza uma pesquisa de índice duplo (um contra a PRIMARY KEY e depois um contra o índice clusterizado interno gen_clust_index ), executar ORDER BY em uma tabela InnoDB realmente não oferece ganhos de desempenho.
IMHO, se a PRIMARY KEY tiver algo desagradável como 8 colunas
Nota: Em teoria , você pode ver uma diferença de desempenho muito, muito pequena em uma tabela InnoDB (chame-a de minhatabela) se fizer o seguinte:
Isso ordenaria o gen_clust_index (índice de cluster interno) na ordem do rowid e na ordem da chave primária. No entanto, realizar essa ordenação interna de rowids é como transformar chumbo em ouro . O processamento de tempo, esforço e energia supera em muito qualquer benefício de desempenho que isso possa aparentemente comprar, mas nunca totalmente percebido, pois cada pesquisa de chave primária também resulta em uma pesquisa de rowid. Resumindo : não faça isso a menos que esteja usando apenas o MyISAM .
Aqui estão meus critérios para usar ORDER BY na coluna em uma PRIMARY KEY
EMBARGO
A razão pela qual mencionei uma CHAVE PRIMÁRIA de 8 colunas? Meu empregador anterior tinha dezenas de GB de dados somente leitura enviados mensalmente de um fornecedor externo. Eu aprendi sobre ALTER TABLE...ORDER BY enquanto estava lá e usei contra aquelas tabelas MyISAM. Como muitas consultas de intervalo foram feitas em PRIMARY KEY, o tempo de consulta foi surpreendente para todos, inclusive para mim.