sql >> Databáze >  >> RDS >> Mysql

MIN/MAX vs. ORDER BY a LIMIT

V nejhorším případě, kdy se díváte na neindexované pole, pomocí MIN() vyžaduje jeden úplný průchod tabulkou. Pomocí SORT a LIMIT vyžaduje řazení souborů. Pokud běžíte proti velké tabulce, pravděpodobně by byl významný rozdíl ve vnímaném výkonu. Jako neoficiální datový bod MIN() při SORT trvalo 0,36 s a LIMIT vzal 0,84 s proti 106 000 řádkové tabulce na mém dev serveru.

Pokud se však díváte na indexovaný sloupec, rozdíl je obtížnější si všimnout (nesmyslný datový bod je v obou případech 0,00 s). Když se však podíváme na výstup z vysvětlení, vypadá to jako MIN() je schopen jednoduše vybrat nejmenší hodnotu z indexu (řádky 'Vybrat tabulky optimalizované pryč' a 'NULL'), zatímco SORT a LIMIT ještě potřebuje provést uspořádané procházení indexu (106 000 řádků). Skutečný dopad na výkon je pravděpodobně zanedbatelný.

Vypadá to jako MIN() je správná cesta – v horším případě je rychlejší, v lepším k nerozeznání, jde o standardní SQL a nejjasněji vyjadřuje hodnotu, kterou se snažíte získat. Jediný případ, kdy se zdá, že pomocí SORT a LIMIT by bylo žádoucí, protože mson zmíněnou, kde píšete obecnou operaci, která najde horních nebo dolních N hodnot z libovolných sloupců a nemá cenu vypisovat operaci speciálního případu.



  1. Odstraňte duplikát z tabulky

  2. Generování diagramu vztahu tabulky z existujícího schématu (SQL Server)

  3. Převeďte uniklý znak Unicode zpět na skutečný znak v PostgreSQL

  4. pomocí hodnot oddělených čárkami uvnitř klauzule IN pro sloupec NUMBER