Pergunta

Será a limitação de uma consulta para um resultado recorde, melhorar o desempenho em um grande(ish) tabela MySQL se a tabela possui apenas uma correspondência resultado?

por exemplo

 select * from people where name = "Re0sless" limit 1

se houver apenas um registro com esse nome?e o que se name foi a chave primária/ set exclusivo?e será que vale a pena atualizar a consulta ou será que o ganho seja mínima?

Foi útil?

Solução

Se a coluna tem

um índice exclusivo:não, não é de mais rápido

um índice não exclusivo:talvez, porque ele vai evitar o envio de outras linhas além da primeira correspondência, se existir algum

nº índice:às vezes

  • se 1 ou mais linhas que correspondam à consulta, sim, porque a tabela completa da digitalização será interrompida após a primeira linha é correspondido.
  • se não há linhas correspondem a consulta, nenhum, porque ele vai precisar para concluir um full table scan

Outras dicas

Se você tiver um pouco mais complicado de consulta, com um ou mais associações, a cláusula LIMIT dá o otimizador de informação extra.Se ele espera corresponder a duas tabelas e retornar todas as linhas, de um hash join normalmente é o ideal.Uma associação de hash é um tipo de associação otimizado para grandes quantidades de correspondência.

Agora, se o otimizador sabe você passou do LIMITE de 1, ele sabe que ele não vai ser o processamento de grandes quantidades de dados.Ele pode reverter para uma associação de loop.

Com base no banco de dados (e até mesmo a versão de banco de dados) isso pode ter um enorme impacto no desempenho.

Para responder às suas perguntas na ordem:1) sim, se não houver nenhum índice no nome.A consulta vai acabar assim que localiza o primeiro registro.tire o limite e tem que fazer uma varredura completa na tabela de cada vez.2) não.principal/chaves únicas são garantidos para ser exclusivo.A consulta deve ser interrompida assim que ele encontra a linha.

Eu acredito que o LIMITE é algo feito depois que o conjunto de dados é encontrado e o conjunto de resultados está sendo construído até então eu não esperaria que isso faça qualquer diferença.Tornando o nome de chave primária, terá um efeito positivo significativo, já que irá resultar em um índice que está sendo feito para a coluna.

Se o "nome" é único na tabela e, em seguida, pode ainda haver um (muito, muito, mínimo) ganho em desempenho, colocando o limite de restrição na sua consulta.Se o nome é a chave primária, provavelmente haverá nenhum.

Sim, você vai notar uma diferença de desempenho ao lidar com os dados.Um registro ocupa menos espaço do que vários registros.A menos que você está lidando com muitas linhas, isso não seria muita diferença, mas uma vez que você executar a consulta, os dados tem que ser apresentado de volta para você, o que é mais custoso, ou tratadas por meio de programação.De qualquer maneira, um registro é mais fácil do que vários.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top