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

Forespørgselshastighed baseret på rækkefølgen af ​​kolonner

Svaret er ja, det betyder noget, og det kan betyde meget, men normalt ikke meget.

Al I/O udføres på sideniveau (typisk 2K eller 4K afhængigt af dit OS). Kolonnedata for rækker gemmes ved siden af ​​hinanden, undtagen når siden bliver fuld, i hvilket tilfælde dataene skrives på den anden (normalt den næste) side.

Jo større dataplads på disken, der kræves for kolonner mellem (baseret på tabeldefinitionen) de kolonner, du vælger, jo større er chancen for, at dataene for de valgte kolonner (nogle gange) vil være på forskellige sider. At være på en anden side kan resultere i en ekstra I/O-operation (hvis der ikke er valgt andre rækker på den anden side). I værste fald kan hver kolonne, du vælger, være på en anden side.

Her er et eksempel:

create table bad_layout (
num1 int,
large1 varchar(4000),
num2 int,
large2 varchar(4000),
num3 int,
large3 varchar(4000)
);

create table better_layout (
num1 int,
num2 int,
num3 int,
large1 varchar(4000),
large2 varchar(4000),
large3 varchar(4000)
);

Sammenligning:vælg num1, num2, num3 fra dårligt_layout; vælg num1, num2, num3 fra bedre_layout;

Fordi for bad_layout hver num-kolonne grundlæggende vil være på en anden side, vil hver række kræve 3 i/O-operationer. Omvendt, for better_layout vil antal kolonner normalt være på samme side.

Bad_layout-forespørgslen vil sandsynligvis tage omkring 3 gange længere tid at udføre.

Godt tabellayout kan gøre en stor forskel for forespørgselsydeevne. Du bør prøve at holde kolonner, der normalt er valgt sammen, så tæt som muligt på hinanden i tabellayoutet.



  1. Tæl alle poster, der ikke eksisterer, til anden tabel - SQL Query

  2. MySQL sagde:Dokumentation #1045 - Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:NEJ)

  3. PostgreSQL:Vis tabeller i PostgreSQL

  4. Hvordan konverteres tal til streng i Oracle?