sql >> Databasteknik >  >> RDS >> Mysql

MIN/MAX vs ORDER BY och LIMIT

I värsta fall, när du tittar på ett oindexerat fält, använder du MIN() kräver en enda hel passning av bordet. Använder SORT och LIMIT kräver en filsortering. Om det körs mot ett stort bord, skulle det sannolikt finnas en betydande skillnad i upplevd prestanda. Som en anekdotisk datapunkt, MIN() tog .36s medan SORT och LIMIT tog .84s mot en tabell med 106 000 rader på min dev-server.

Om du däremot tittar på en indexerad kolumn är skillnaden svårare att märka (meningslös datapunkt är 0,00s i båda fallen). Om man tittar på utdata från förklara ser det dock ut som MIN() kan helt enkelt plocka det minsta värdet från indexet (raderna 'Välj tabeller optimerade bort' och 'NULL') medan SORT och LIMIT behöver fortfarande göra en beställd genomgång av indexet (106 000 rader). Den faktiska prestandapåverkan är förmodligen försumbar.

Det ser ut som MIN() är vägen att gå - det är snabbare i värsta fall, omöjligt att skilja i bästa fall, är standard SQL och uttrycker tydligast det värde du försöker få. Det enda fallet där det verkar som att använda SORT och LIMIT skulle vara önskvärt skulle vara, eftersom mson nämnt, där du skriver en allmän operation som hittar de övre eller nedre N-värdena från godtyckliga kolumner och det är inte värt att skriva ut operationen i speciella fall.



  1. Hur man aktiverar en främmande nyckelbegränsning i SQL Server (T-SQL-exempel)

  2. SQLException:Ingen lämplig drivrutin hittades för jdbc:oracle:thin:@//localhost:1521/orcl

  3. regexp_substr hoppar över tomma positioner

  4. Indexerar MySQL kolumner för främmande nyckel automatiskt?