Ik heb een grote tabel, met circa 33K records, dit zal later nog groeien naar ~4 miljoen. Nu stel ik even een simpel voorbeeldje:
-kolom userid -kolom geld
4 | 5.73
2 | 9.92
483 | 1852.58
853 | 5324.04
Nu wil ik dus zo snel mogelijk de userid 853 eruitpikken. Ik weet dat ik kan doen ORDER BY geld DESC LIMIT 1. Maar ik vroeg me af of dit wel een efficiënte oplossing was (met 4+ mil records). Kan dit niet veel sneller?
De vriendelijkheid is dus wél duidelijk achteruit gegaan sinds de nieuwe phphulp opstaat, jammer :( Was altijd zo'n trouwe gebruiker.
Edit: en dan werkt 't nog niet! Je wil namelijk ook nog steeds de ID hebben van die hoogste gebruiker. En als je wil doen
SELECT id,MAX(geld) FROM xxx dan pakt hij de eerste ID die hij tegenkomt, en niet van de rij die het hoogste is.
SELECT *
FROM iets
WHERE geld = (
SELECT MAX( geld )
FROM iets
LIMIT 0 , 1 );
Weet niet of dit het efficiëntst is, maar het kan wel.
Misschien dat het leuk is als je het even test.
Gewoon de verschillende oplossingen in PHPMyAdmin uitvoeren, en dan de tijden even in een tabelletje zetten.
[size=xsmall]Toevoeging op 03/10/2010 21:41:37:[/size]
Ik heb zelf even snel een test gedaan op een miljoen records.
Met de order by duurde het gemiddeld 0,38 seconden om de maximum op te halen, (er zijn alleen meerdere met de hoogste waarde en je krijgt er maar 1)
En met de subquery in de WHERE duurde het gemiddeld 0,29 seconden.
Misschien heeft er iemand nog andere ideeën.
?Onbekende gebruiker
03-10-2010 21:43
Nico Kaag op 03/10/2010 21:29:36
SELECT *
FROM iets
WHERE geld = (
SELECT MAX( geld )
FROM iets
LIMIT 0 , 1 );
Weet niet of dit het efficiëntst is, maar het kan wel.
Misschien dat het leuk is als je het even test.
Gewoon de verschillende oplossingen in PHPMyAdmin uitvoeren, en dan de tijden even in een tabelletje zetten.
[size=xsmall]Toevoeging op 03/10/2010 21:41:37:[/size]
Ik heb zelf even snel een test gedaan op een miljoen records.
Met de order by duurde het gemiddeld 0,38 seconden om de maximum op te halen, (er zijn alleen meerdere met de hoogste waarde en je krijgt er maar 1)
En met de subquery in de WHERE duurde het gemiddeld 0,29 seconden.
Misschien heeft er iemand nog andere ideeën.
Zulke dingen als met max werken zijn wel voorbeelden van subqueries op scholen... :-)
(Geen idee waar dit topic over gaat, maar gewoon weer lekker aangeven dat je nog wel iets leert op een school.)
Mijn query levert ook meerdere resultaten op, namelijke IEDEREEN die het meeste geld heeft.
En die LIMIT is inderdaad nutteloos, maar dat zijn van die dingen die er bij mij stiekem ingeslopen zijn, omdat altijd als extra erin te gooien.
En wat is er mis met PHPMyAdmin, is het tegenwoordig van Amstel en daarom "PHPOurAdmin"?
Ik zelf zie niks verkeerds aan PHPOurAdmin, het is een makkelijke tool om snel een database up te loaden, en zo af en toe een query te testen.
Misschien dat ik iets mis, maar dan laat ik mij graag even bijspijkeren.