Quando é o momento adequado para usar a instrução SQL “SELECT [resultados] FROM [tabelas] ONDE [condições] FETCH FIRST [n] apenas linhas”

StackOverflow https://stackoverflow.com/questions/400575

  •  03-07-2019
  •  | 
  •  

Pergunta

Eu não estou completamente certo ao selecionar apenas um determinado número de linhas seria melhor do que simplesmente fazer um seleto declaração mais específica. Tenho a sensação de que estou perdendo algo bastante simples, mas não consigo descobrir isso. Tenho menos de 6 meses de experiência com qualquer SQL e tem sido superficial em que então eu sinto muito se isso é uma pergunta muito simples, mas eu não poderia encontrar uma resposta clara.

Foi útil?

Solução

Eu sei de dois usos comuns:

Paginação: certifique-se de especificar uma ordenação. Se uma ordem não for especificado, muitas implementações db usar o que é conveniente para executar a consulta. Este "ótimo" comportamento ordenação poderia dar resultados muito imprevisíveis.

SELECT top 10 CustomerName
FROM Customer
WHERE CustomerID > 200 --start of page
ORDER BY CustomerID

Subqueries: muitos lugares que uma subconsulta podem ser emitidos exigir que o resultado é um valor único. top 1 é apenas mais rápido do que no máximo em muitos casos.

--give me some customer that ordered today
SELECT CustomerName
FROM Customer
WHERE CustomerID =
(
  SELECT top 1 CustomerID
  FROM Orders
  WHERE OrderDate = @Today
)

Outras dicas

paginação personalizada, normalmente.

Estamos usando a declaração, pelos seguintes motivos:

  1. Mostrar apenas os resultados mais relevantes (dizem que o top 100) sem ter que transferir todas as linhas da DB para o cliente. Neste caso, também usamos ORDER BY.

  2. Nós apenas queremos saber se existem linhas correspondentes e tem alguns exemplos. Neste caso, nós não ordenar os resultados e, novamente, FETCH FIRST é muito mais barato do que ter o DB se preparam para lotes de transferência de linhas e, em seguida, jogá-los fora no cliente. Este é geralmente durante o desenvolvimento de software quando a necessidade de obter um sentimento se um determinado SQL é certo.

Quando você deseja exibir os valores para um usuário, você só são susceptíveis de precisar N linhas. Geralmente o servidor de banco de dados pode buscar as primeiras N linhas, mais rápido do que ele pode buscar todas as linhas, para que o seu redesenho de tela pode ir um pouco mais rápido.

A Oracle tem até uma dica, chamados FIRST_ROWS que sugere que a obtenção de dados de volta rápida, é mais importante do que conseguir tudo de volta de forma eficiente.

Os designers de SQL concordo com você, e é por isso SQL padrão não incluído top / limite / buscar em primeiro lugar, etc.

Pense google resultados de pesquisa e o número de páginas normalmente há por resultados.

Embora, obviamente, não há muito mais a ele no seu caso, mas essa é a idéia.

Além de paginação, qualquer hora que quiser a ordem mais ou menos [inserir métrica aqui] linha de uma tabela, em [qualquer que seja métrica] e limitando a 1 linha é, IME, melhor do que fazer uma subconsulta usando MIN / MAX. Poderia variar de acordo com motor.

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