In het ergste geval, wanneer u naar een niet-geïndexeerd veld kijkt, gebruikt u MIN()
vereist een enkele volledige pass van de tafel. SORT
gebruiken en LIMIT
vereist een bestandssortering. Als het tegen een grote tafel wordt uitgevoerd, zou er waarschijnlijk een aanzienlijk verschil zijn in de waargenomen prestaties. Als een anekdotisch gegevenspunt, MIN()
duurde .36s terwijl SORT
en LIMIT
nam .84s tegen een 106.000 rijtabel op mijn dev-server.
Als u echter naar een geïndexeerde kolom kijkt, is het verschil moeilijker op te merken (het zinloze gegevenspunt is in beide gevallen 0,00s). Als we naar de uitvoer van explain kijken, lijkt het echter op MIN()
kan eenvoudig de kleinste waarde uit de index halen (rijen 'Selecteer tabellen die zijn geoptimaliseerd' en 'NULL') terwijl de SORT
en LIMIT
moet nog steeds een geordende doorloop van de index doen (106.000 rijen). De werkelijke impact op de prestaties is waarschijnlijk te verwaarlozen.
Het ziet eruit als MIN()
is de manier om te gaan - het is sneller in het ergste geval, niet te onderscheiden in het beste geval, is standaard SQL en geeft het duidelijkst de waarde weer die je probeert te krijgen. Het enige geval waarin het lijkt alsof het gebruik van SORT
en LIMIT
zou wenselijk zijn, zoals mson
genoemd, waar u een algemene bewerking schrijft die de bovenste of onderste N-waarden uit willekeurige kolommen vindt en het is niet de moeite waard om de speciale bewerking uit te schrijven.