Domanda

Ho una domanda che assomiglia a questo:

SELECT article FROM table1 ORDER BY publish_date LIMIT 20

Come funziona ORDER BY? Sarà ordinare tutti i record, quindi ottenere i primi 20, o sarà ottenere 20 record e dell'ordine da parte del campo publish_date?

Se è l'ultimo, si sta non garantita per ottenere davvero il più recente 20 articoli.

È stato utile?

Soluzione

Sarà ordinare prima, quindi ottenere la prima banca dati 20. Una sarà anche processo nulla nella clausola WHERE prima ORDER BY.

Altri suggerimenti

La clausola LIMIT può essere utilizzato per limitare il numero di righe restituite dall'istruzione SELECT. LIMIT richiede uno o due argomenti numerici, che devono essere sia costanti intero non negativo (tranne con istruzioni preparate).

Con due argomenti, i primi specifica l'argomento di offset della prima fila di ritorno, e la seconda specifica il numero massimo di righe da restituire. L'offset della riga iniziale è 0 (non 1):

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15

Per recuperare tutte le righe da un offset fino alla fine del set di risultati certi, è possibile utilizzare alcuni gran numero per il secondo parametro. Questa dichiarazione recupera tutte le righe dalla fila 96 ° per l'ultimo:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

Con un argomento, il valore specifica il numero di righe da restituire a partire dall'inizio del set di risultati:

SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows

In altre parole, LIMIT row_count equivale a LIMIT 0, row_count.

Tutti i dettagli su: http://dev.mysql.com/ doc / refman / 5.0 / it / select.html

Se c'è un indice adatto, in questo caso sul campo publish_date, quindi MySQL non è necessario eseguire la scansione dell'intero indice per ottenere i 20 record richiesti - i 20 record verranno trovati all'inizio dell'indice. Ma se non c'è indice idoneo, allora sarà necessaria una scansione completa della tabella.

C'è un MySQL Performance Blog Articolo a partire dal 2009 su questo.

Si potrebbe aggiungere [asc] o [disc] alla fine dell'ordine da parte di ottenere il primo o l'ultimo record

Ad esempio, questo vi darà gli ultimi record prima

ORDER BY stamp DESC

Append la clausola LIMIT dopo ORDER BY

Proprio come dice @James, che ordinerà tutti i record, quindi ottenere le prime 20 righe.

Come è così, si sono garantiti per ottenere i 20 articoli pubblicati prima, non verranno mostrati quelli più recenti.

Nella tua situazione, vi consiglio di aggiungere desc a order by publish_date, se si desidera che gli articoli più nuovi, quindi il più recente articolo sarà la prima.

Se avete bisogno di tenere il risultato in ordine crescente, e ancora desideri solo i 10 articoli più recenti si può chiedere mysql per ordinare il risultato due volte.

Questa domanda sotto ordinerà discendente risultato e limitare il risultato a 10 (cioè la query all'interno delle parentesi). Sarà comunque essere ordinata in ordine decrescente, e non siamo soddisfatti con quello, quindi chiediamo mysql per ordinare ancora una volta. Ora abbiamo il più recente risultato sull'ultima fila.

select t.article 
from 
    (select article, publish_date 
     from table1
     order by publish_date desc limit 10) t 

order by t.publish_date asc;

Se avete bisogno di tutte le colonne, si è fatto in questo modo:

select t.* 
from 
    (select * 
     from table1  
     order by publish_date desc limit 10) t 

order by t.publish_date asc;

Io uso questa tecnica quando scrivo manualmente le query per esaminare il database per varie cose. Non ho usato in un ambiente di produzione, ma ora quando panchina segnato, l'ordinamento in più non influire sulle prestazioni.

È possibile utilizzare questo codice SELECT article FROM table1 ORDER BY publish_date LIMIT 0,10 dove 0 è un limite inizio della registrazione e 10 il numero di record

LIMIT è solitamente applicato come ultima operazione, quindi il risultato sarà prima ordinati e quindi limitato a 20. Infatti, l'ordinamento si fermerà appena prima 20 ordinate risultato.

sintassi anche di LIMIT è diversa a seconda dei database, per esempio:

mysql - LIMIT 1, 2

postgres - LIMIT 2 OFFSET 1

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