2016-01-15 15 views
8

Sto usando InnoDB. Ho bisogno di interrogare per ottenere 10 record da una tabella è qualsiasi ordine.È sicuro usare LIMIT senza ORDER BY

È sicuro utilizzare LIMIT senza ORDER BY? Sarebbe più veloce?

+1

è possibile utilizzare il limite senza ordine di. che tipo di safty vuoi? –

risposta

2

Se non si utilizza ORDER BY allora si non stanno smistando i tuoi record, quindi renderà sicuramente più veloce il recupero dei tuoi dati. Quindi, se si utilizza semplicemente LIMIT, sarebbe più veloce rispetto ai dati recuperati tramite ORDER BY. Ma notate che in quel caso, quindi, i dati non saranno in alcun ordine.

Per quanto riguarda la sicurezza, non sono sicuro di quale sicurezza si sta pensando, in quanto non vi è alcun potenziale danno in una query che utilizza solo LIMIT e non utilizza una clausola ORDER BY.

È inoltre possibile consultare l'articolo: ORDER BY … LIMIT Performance Optimization

1

Sì, è possibile e sì, sarebbe più veloce (presumendo che l'ordine non sia importante per voi). order by richiede l'ordinamento. Ciò significa che il database deve fare più lavoro per ottenere il risultato. Più comunemente limit viene utilizzato con order by poiché vogliamo mettere alcuni vincoli di ordinamento su che 10 record si ottiene (per esempio più recente, più alto rango di qualche tipo, etc.)

1

Dipende da cosa si considera come safe se si vuole risultato coerente (meanning, ottenendo lo stesso risultato ogni volta finché il contenuto della tabella non cambierà) o se vuoi risultati specifici (più grossi, nuovi, più vecchi, qualsiasi cosa) - di questo richiede ordine. Se per sicurezza si capisce che la query non si schiaccerà, e non si cura di quali risultati X si ottengono, allora sì, l'uso del limite va bene (questo in realtà viene fatto automaticamente da molti strumenti sql, come mysql workbench, per velocizzare le cose).

In termini di velocità- renderà waster senza fine per due ragioni:

  1. ordinazione richiede tempo.
  2. L'utilizzo del limite consente al server di arrestarsi non appena trova i primi risultati X. È possibile vedere che le query con limit 10 verranno eseguite più rapidamente di limit 100000 su tabelle di grandi dimensioni. Quando usi l'ordine, il server deve passare attraverso tutti i risultati, quindi non puoi fermarti nel mezzo.

Quindi sì, con limite senza fine renderà più veloce

0

I 3 risposte finora sono buone. Ma non sono completamente corretti.

Contrariamente alle altre risposte, a volte tralasciando ORDER BY sarà non renderlo più veloce. L'ottimizzatore potrebbe capitare di generare comunque le righe in quell'ordine. Esempi:

  • GROUP BY generalmente ordina i risultati. Pertanto, se lo ORDER BY corrisponde allo GROUP BY, non vi è alcuno sforzo aggiuntivo.
  • ORDER BY the_primary_key potrebbe corrispondere all'ordine di recupero. Questo è quasi garantito per InnoDB senza una clausola WHERE.

"Sicuro" non calcola.

Problemi correlati