2017-01-14 4 views
2

Ich habe Datenbank mit etwa 500K Zeile drin. Ich möchte von Zeile wie 1-5000 zufällige Reihe bekommen und ihre Grenze Ergebnis Grenze gefallen muss 100.Query Limit von MYSQL

Meine aktuelle Abfrage wie unter

'SELECT * FROM user where status='0' LIMIT 10,100' 

was soll ich oder benutzen Sie ändern für begrenzte zufällige Reihe zu bekommen, so Ich kann schnelles Ergebnis ohne Speicherverbrauch bekommen?

Dank

+0

* von Zeile wie 1 bis 5000 * - was den Zeilen 1 bis 5000 macht? Was ist die Reihenfolge hier? Sie wissen *, dass eine Tabelle eine ungeordnete Menge von Zeilen ist, richtig? – GurV

Antwort

3

Eine Datenbanktabelle ist eine ungeordnete Menge, so dass Sie einige um 1 bis 5000 zu erhalten bieten müssen werde Zeilen (sonst sind das 1 bis 5000 Zeilen), kann auf Benutzer-ID basieren.

Sobald Sie, dass, können Sie die Zeilen in subquery begrenzen und sortierte nach rand() und erstem 100 wie folgt erhalten:

select * 
from (select 
     * 
    from user 
     where status = 0 
    order by /* set of columns, may be user_id*/ 
    limit 1, 5000 
) t order by rand() limit 100; 
+0

Ich bin verwirrt in der Reihenfolge von Rand() Limit 100; .... Was ist das hier? –

+0

T ist ein Alias ​​für die Unterabfrage. – GurV

0

Diese Abfrage gibt Ihnen alle 100 zufällige Zeilen aus 5000k Reihen

select * from user where status='0' order by rand() limit 100 
+0

Dies wird sehr langsam sein, da rand() keinen Index verwendet. – abeyaz

+0

@abeyaz: Ja, verglichen mit der @ GurV-Abfrage ist diese Abfrage langsam. – Mack4Hack