2016-01-15 15 views
8

zu verwenden Ich verwende InnoDB. Ich muss abfragen, um 10 Datensätze aus einer Tabelle zu erhalten, ist eine Bestellung.Ist es sicher, LIMIT ohne ORDER BY

Ist es sicher, LIMIT ohne ORDER BY zu verwenden? Wäre es schneller?

+1

können Sie Limit ohne Reihenfolge von verwenden. Welche Art von Sicherheit möchten Sie? –

Antwort

2

Wenn Sie die ORDER BY verwenden Sie dann Ihre Datensätze werden nicht sortiert, so dass Ihre Daten schneller abgerufen werden können. Wenn Sie also einfach LIMIT verwenden, wäre es schneller als die Daten, die über ORDER BY abgerufen werden. Aber beachte, dass in diesem Fall die Daten nicht in einer Reihenfolge sind.

In Bezug auf die Sicherheit bin ich mir nicht sicher, welche Sicherheit Sie denken, da es in einer Abfrage, die nur LIMIT verwendet und keine ORDER BY-Klausel verwendet, keinen potenziellen Schaden gibt.

Sie können auch auf den Artikel aussehen: ORDER BY … LIMIT Performance Optimization

1

Ja, Sie können und ja, es wäre schneller (vorausgesetzt, die Reihenfolge spielt für Sie keine Rolle). order by erfordert Sortieren. Dies bedeutet, dass die Datenbank mehr Arbeit leisten muss, um das Ergebnis zu erhalten. Am häufigsten wird limit mit order by verwendet, da wollen einige Reihenfolgen-Einschränkungen auf zu setzen, die 10 Datensätze, die Sie erhalten (etwa jüngsten, höchsten Rang irgendeiner Art, etc.)

1

Es hängt davon ab, was Sie als Safe- prüfen, ob Sie konsistentes Ergebnis wollen (meanning, das gleiche Ergebnis zu erzielen, jedes Mal, solange der Inhalt der Tabelle nicht ändern wird) oder wenn Sie wollen ein bestimmtes Ergebnis (biggests, neuste, älteste, was auch immer) - als dies erfordert Reihenfolge. Wenn Sie sicher sind, dass die Abfrage nicht verknallt wird, und es Ihnen egal ist, welche X-Ergebnisse Sie erhalten, dann ist die Verwendung von Limit in Ordnung (dies wird automatisch von vielen SQL-Tools wie mysql workbench durchgeführt, um die Dinge zu beschleunigen).

In Bezug auf die drehzahl- wird es aus zwei Gründen ohne Auftrag bilden Waster:

  1. Bestellung braucht Zeit.
  2. Mit Limit kann der Server gestoppt werden, da er die ersten X-Ergebnisse findet. Sie können sehen, dass Abfragen mit limit 10 bei großen Tabellen schneller als limit 100000 ausgeführt werden. Wenn Sie die Reihenfolge verwenden, muss der Server alle Ergebnisse durchlaufen, also kann nicht in der Mitte angehalten werden.

Also ja, wird mit Limit, ohne um sie

0

Die 3 Antworten schneller bisher gut sind. Aber sie sind nicht völlig richtig.

Im Gegensatz zu den anderen Antworten, manchmal Weglassen ORDER BY werden nicht es schneller machen. Möglicherweise generiert der Optimierer die Zeilen trotzdem in dieser Reihenfolge. Beispiele:

  • GROUP BY bestellt normalerweise die Ergebnisse. Also, wenn die ORDER BY würde die GROUP BY übereinstimmen, gibt es keinen zusätzlichen Aufwand.
  • ORDER BY the_primary_key möglicherweise die Reihenfolge des Abrufs entsprechen. Dies ist für InnoDB ohne eine WHERE-Klausel fast garantiert.

"Sicher" wird nicht berechnet.