2016-04-01 5 views
1

Ich frage mich, ob es andere Best/Practices gibt als Performance oder Optimierungen.Was ist der beste Ansatz, um die letzten x Datensätze zu erhalten? Verwenden von MySQL Limit und ORDER DESC?

EDIT: Ich benutze PHP7. Sollte ich das klar gemacht haben, entschuldige ich mich. Ich mache ein Projekt von Freiwilligen für einen lokalen Non-Profit und es ist Setup wie folgt aus:

Tabelle: Volunteer

pk: v_id

Also, was ich tue ist: SELECT * from Volunteer ORDER BY v_id DESC LIMIT 25;

(Sie wollen, dass die letzten 25 aktuell für den "letzten Logs" -Bericht angezeigt werden.)

EDIT2: Der einzige Grund, warum ich das jetzt frage, haben wir 10k freiwillige Logs im System getroffen und ich fange an um MON-FRI t zu realisieren hey kann irgendwo zwischen 50-100 (oder mehr) Logs pro Tag hinzufügen, so dass es schnell summiert.

+0

Sie Ihre Anforderung mit dem Umfang des Codes zur Verfügung stellen müssen, dass die anderen helfen, Ihr Problem zu verstehen und – Ankanna

Antwort

-1

Wenn Sie es tun programmatisch ORDER es ASC mit LIMIT X und dann die Schleife durch die Datensätze zurück.

Wenn Sie uns Ihre Sprache (PHP, Knoten (JavaScript), Java, etc.) geben wir Ihnen mit der Rückwärtsschleife helfen können, aber es geht ungefähr so:

for(i=rows.length-1;i>=0;i--){ 
    //do your stuff here 
} 

Wenn Sie tun müssen, es in MySQL

SELECT Ergebnisse ASC mit LIMIT X als Unterabfrage und wickeln sie dann in einer Abfrage ORDERDESC

SELECT 
* 
FROM 
(
    SELECT 
    somecol 
    FROM 
    sometable 
    ORDER BY 
    the_date ASC 
    LIMIT 100 
) as a 
ORDER BY 
the_date DESC 

UPDATE: So wie die Frage zuerst gestellt wurde, klang es so, als wollten Sie die letzten X Ergebnisse, bestellte DESC. Ich werde meine Antwort an Ort und Stelle lassen, falls jemand anderes hier her kommt und danach sucht.

Was Sie jetzt mit den ORDER BY und LIMIT tun, ist der optimale Weg, es zu tun. Um zu optimieren, möchten Sie vielleicht SELECT nur die Spalten, die Sie benötigen, und stellen Sie sicher, dass Sie einen eindeutigen Index für v_id haben. Wenn Sie mehr Optimierung benötigen, sollten Sie in Betracht ziehen, häufig alte Daten zu archivieren und Staub zu saugen.

+0

Ordnung, dank leicht zu beantworten. – BluTiger

0

versuchen, wie this.It ist die einfachste bisher

Select * from tablename order by column desc limit 5 
+0

Sie benötigen einen Spaltennamen nach 'order by'. – Barmar

+0

@Barmar Ya du bist richtig Ich denke, die Frage ist nicht zu markieren – Ankanna

+0

Ich frage, ob es irgendwelche Optimierungen zu tun gibt, wie ich für eine erhöhte Belastung auf dem Server vorbereiten. – BluTiger

Verwandte Themen