sql >> Database teknologi >  >> RDS >> Mysql

Sådan får du de øverste N-værdier for hver kolonne i MySql

Dette er IKKE noget, du ønsker at gøre i en enkelt forespørgsel. Bare bryd det ud, en forespørgsel for hver kolonne. Under de rigtige omstændigheder (også med de rigtige indekser og højre kolonnetyper), kan MySQL faktisk optimere disse forespørgsler ved at kortslutte, så den aldrig behøver at scanne hele tabellen, den trækker bare de øverste 5 værdier ud og færdig.

SELECT column1 FROM table ORDER BY column1 DESC LIMIT 5
SELECT column2 FROM table ORDER BY column2 DESC LIMIT 5
etc

Hvis du prøver at samle dem alle sammen til en gigantisk, kludgy forespørgsel, vil du kun lykkes med at overbevise optimeringsværktøjet til bare at give op og scanne hele bordet igen 50 gange og derefter bruge 50 midlertidige tabeller og sandsynligvis noget filsortering for en god ordens skyld. Så medmindre din tabel har omkring 10 rækker i sig (hvilket den åbenbart ikke har), vil 50 separate forespørgsler altid være hurtigere.



  1. Hvordan Oracle Index klyngefaktor beregnes

  2. Konvertering af funktion fra Oracle til PostgreSQL

  3. Gruppér efter bruger og vis seneste i MYSQL virker ikke

  4. kan ikke opnå forbindelse med MySQL db på fjernmaskine