MySQL é um banco de dados relacional sistema de gerenciamento de código-fonte aberto (RDBMS) . Devido ao seu baixo custo, as organizações estão cada vez mais usando-o para grandes bases de dados . O maior banco de dados, o mais provável uma consulta irá retornar muitas linhas duplicadas , tornando saída difícil de ler e a consulta lenta . Usando a palavra-chave DISTINCT em suas instruções SELECT pode eliminar essas duplicatas em sua saída. Por que você recebe resultados duplicados
Normalmente, uma consulta não exibir todas as colunas na tabela ou tabelas que são referenciados . Um empregador pode , por exemplo, tem uma tabela que acompanha as ausências do empregado. Se ele quiser descobrir quais os funcionários tiveram pelo menos uma ausência no último mês , ele pode usar uma consulta que é algo como isto:
Selecione employees.first_name , os funcionários employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date > = ' junho -01- 09' ;
Se Bob Smith estava ausente por três dias em junho, os resultados da consulta irá conter três fileiras de Bob Smith. Mesmo que a consulta não exibir a data , uma vez que três faltas de Bob estavam em datas diferentes, esta consulta retorna cada uma das três linhas.
Por resultados duplicados são ruins
as linhas duplicadas não só fazer a sua saída difícil de ler , eles também abrandar a sua consulta e recursos de banco de dados de porco . A não ser que seu banco de dados é muito pequena, você provavelmente desenvolver seus scripts SQL em uma instância de banco de desenvolvimento que é separado de sua instância de produção . Não é de todo incomum para as instâncias de desenvolvimento para ter muito menos dados em si do que a instância de produção .
Se você permitir que as linhas duplicadas em sua saída , você está fazendo sua pesquisa de banco de dados por todo o caminho através de todos os tabelas que você se uniram em sua consulta . Isso pode fazer uma consulta que correu rápido o suficiente em sua instância dev lento para um rastreamento na produção. Se o seu banco de dados de produção é grande , a consulta pode ser executado por horas
Usando e Otimizando DISTINCT
Os seguintes retornos selecione uma linha para Bob Smith: .
SELECIONE employees.first_name DISTINCT, funcionários employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date ENTRE '2009 -06-01 'AND '2009 -07- 01' ;
seus resultados são mais fáceis de ler, mas o seu servidor de banco de dados ainda tem que trabalhar muito duro se o seu empregado de mesa tem muito mais linhas do que sua mesa de ausências. MySQL irá percorrer todos os registros na tabela de funcionários para ver se esse funcionário tem quaisquer ausências
Em vez disso, tornar o trabalho DISTINCT para você fazer sua consulta mais eficiente: .
Selecione employees.first_name DISTINCT , os funcionários employees.last_nameFROM , absencesWHERE absences.employee_id = employees.employee_idAND absences.date > = ' junho -01- 09' ;
Esta consulta vai demorar um registro na tabela de faltas e parar de procurar a tabela de funcionários uma vez que encontra o funcionário que vai com essa ausência . Sua consulta só irá executar as pesquisas , pois há ausências , e irá procurar através de muito menos de tabela de funcionários em cada pesquisa. Ele usa menos recursos de banco de dados e corre muito mais rápido.