sql >> Database >  >> RDS >> Mysql

MIN/MAX vs BESTELLEN PER en LIMIT

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.



  1. Verbinding maken met MySQL met Perl

  2. Hoe Unicode() werkt in SQLite

  3. De volgorde van tekens in een tekenreeks omkeren in MySQL

  4. Ontdek 10 minder bekende mogelijkheden van SQL Diagnostic Manager