Para facilitar algumas buscas em um arquivo CSV em meu trabalho, resolvi carregar esse arquivo em um banco de dados relacional MySQL. Obs.: Como trabalho em uma área que mexe com diretórios LDAP, eu deveria ter carregado em uma base LDAP, mas algumas buscas são realmente mais fáceis com SQL.
Eu precisava saber os tipos de funcionários existentes na empresa. Fiz então a seguinte busca:
SELECT codigoCaracteristica, quadro
FROM `Empregados`
GROUP BY codigoCaracteristica
E ela trouxe os dados como deveria.
Pensando um pouco, imaginei que isso poderia ser feito de outras maneiras, e pensei também que, isso poderia ter um desempenho diferente.
Levando-se em conta que o campo codigoCaracteristica é um campo indexado, e o campo quadro não é. O banco tem 11.411 registros. O banco tinha acabado de ser criado, portanto não havia cache.
Realizei 3 buscas diferentes, com os seguintes tempos de resposta:
SELECT DISTINCT codigoCaracteristica, quadro
FROM `Empregados`
Mostrando registros 0 - 3 (4 total, Consulta levou 0.0194 segundos)
SELECT codigoCaracteristica, quadro
FROM `Empregados`
GROUP BY codigoCaracteristica
Mostrando registros 0 - 3 (4 total, Consulta levou 0.0141 segundos)
SELECT codigoCaracteristica, quadro
FROM `Empregados`
GROUP BY quadro
Mostrando registros 0 - 3 (4 total, Consulta levou 0.0335 segundos)
A diferença entre fazer um group by em um campo indexado foi significativa. Mas não considerei relevante a diferença entre fazer um distinct e um group by em um campo indexado.
Acredito que buscas utilizando distinct e group by, mas utilizando mais de uma tabela, deva trazer diferenças mais significativas, mas não fiz testes para verificar.
Nenhum comentário:
Postar um comentário