Quando è il momento giusto per usare l'istruzione SQL "SELEZIONA [risultati] DA [tabelle] DOVE [condizioni] FETCH FIRST [n] SOLO ROWS"

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

  •  03-07-2019
  •  | 
  •  

Domanda

Non sono del tutto sicuro quando selezionare solo un certo numero di righe sarebbe meglio che semplicemente fare un'istruzione select più specifica. Ho la sensazione che mi manchi qualcosa di piuttosto semplice ma non riesco a capirlo. Ho meno di 6 mesi di esperienza con qualsiasi SQL ed è stato superficiale, quindi mi dispiace se questa è una domanda davvero semplice ma non sono riuscito a trovare una risposta chiara.

È stato utile?

Soluzione

Conosco due usi comuni:

Paging: assicurarsi di specificare un ordine. Se non viene specificato un ordinamento, molte implementazioni di database utilizzano ciò che è conveniente per eseguire la query. Questo "ottimale" il comportamento degli ordini potrebbe dare risultati imprevedibili.

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

Sottoquery: molti luoghi in cui è possibile emettere una sottoquery richiedono che il risultato sia un singolo valore. top 1 è solo più veloce di max in molti casi.

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

Altri suggerimenti

Paging personalizzato, in genere.

Stiamo usando la dichiarazione per i seguenti motivi:

  1. Mostra solo i risultati più rilevanti (diciamo i primi 100) senza dover trasferire tutte le righe dal DB al client. In questo caso, utilizziamo anche ORDER BY.

  2. Vogliamo solo sapere se ci sono righe corrispondenti e avere alcuni esempi. In questo caso, non ordiniamo i risultati e, di nuovo, FETCH FIRST è molto più economico rispetto al fatto che il DB si prepari a trasferire molte righe e quindi a buttarle via dal client. Questo di solito avviene durante lo sviluppo del software quando è necessario avere un'idea se un determinato SQL è corretto.

Quando si desidera visualizzare i valori a un utente, è probabile che occorrano solo N righe. Generalmente il server di database può recuperare le prime N righe, più velocemente di quanto possa recuperare tutte le righe, quindi il ridisegno dello schermo può andare un po 'più veloce.

Oracle ha persino un suggerimento, chiamato FIRST_ROWS che suggerisce che recuperare i dati velocemente, è più importante che ripristinarli in modo efficiente.

I progettisti di SQL sono d'accordo con te, motivo per cui SQL standard non include prima top / limit / fetch, ecc.

Pensa ai risultati di ricerca di Google e al numero di pagine in genere disponibili per i risultati.

Anche se ovviamente, c'è molto di più nel loro caso, ma questa è l'idea.

A parte il paging, ogni volta che vuoi la più o almeno la riga [inserisci metrica qui] da una tabella, ordinare su [qualunque metrica] e limitare a 1 riga è, IME, meglio di fare una subquery usando MIN / MAX. Potrebbe variare in base al motore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top