Gib mir die 50 größten nummern, aus den letzten 100 Einträgen

Th3RaZe

Aktiver Benutzer
Beiträge
37
Hallo,

ich habe leider nichts bei Google gefunden was genau zutrifft.

Mein Problem:

Ich will mir die 50 Größten nummern aus den neuesten 100 Einträgen ausgeben lassen.

LIMIT 50 oder 100 ist leider nicht die Lösung, da er die komplette Datenbank durchgeht.

Kann man ihm eine Range mitgeben? wie z.B. von 0 bis 100 und von dieser Range Ordnet er dann nach der Größe?

Mein aktueller code:
Code:
SELECT * FROM content ORDER BY points DESC LIMIT 50
 
Werbung:
Code:
test=# create table th3raze as select * from generate_series(1, 100000) s;
SELECT 100000
test=*# create index idx_th3raze on th3raze(s);
CREATE INDEX
test=*# analyse th3raze;
ANALYZE
test=*# explain select * from th3raze order by s desc limit 50;
  QUERY PLAN   
-------------------------------------------------------------------------------------------------------
 Limit  (cost=0.29..1.82 rows=50 width=4)
  ->  Index Only Scan Backward using idx_th3raze on th3raze  (cost=0.29..3050.29 rows=100000 width=4)
(2 Zeilen)

Erkläre Dein Problem bitte noch einmal.
 
Das ich bitte den befehl wissen wollen, würde, wie man eine Begrenzung einbauen kann bei dem ORDER BY, so dass er nicht die ganze Datenbank durchgeht, sondern nur die neusten 100.
 
Exakt das macht der Index Only Scan, hier noch mal als explain analyse:

Code:
test=*# explain analyse select * from th3raze order by s desc limit 50;
  QUERY PLAN   
--------------------------------------------------------------------------------------------------------------------------------------------------
 Limit  (cost=0.29..1.82 rows=50 width=4) (actual time=0.113..0.184 rows=50 loops=1)
  ->  Index Only Scan Backward using idx_th3raze on th3raze  (cost=0.29..3050.29 rows=100000 width=4) (actual time=0.111..0.168 rows=50 loops=1)
  Heap Fetches: 50
 Planning time: 0.100 ms
 Execution time: 0.229 ms
(5 Zeilen)

test=*#

Kann sein, daß MySQL für sowas zu blöd ist. Dann wirst Du damit aber leben müssen.
 
Werbung:
Hab es mir jetzt ganz einfach gemacht:
Code:
SELECT * FROM (SELECT * FROM content ORDER BY id DESC LIMIT 100) sub ORDER BY points DESC LIMIT 50
 
Zurück
Oben