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

Rychlost dotazu na základě pořadí sloupců

Odpověď je ano, záleží na tom a může na tom hodně záležet, ale obvykle nic moc.

Všechny I/O se provádějí na úrovni stránky (obvykle 2K nebo 4K v závislosti na vašem operačním systému). Sloupcová data pro řádky jsou uložena vedle sebe, kromě případů, kdy se stránka zaplní, v takovém případě jsou data zapsána na další (obvykle další) stránku.

Čím větší je datový prostor na disku potřebný pro sloupce mezi (na základě definice tabulky) vybranými sloupci, tím větší je šance, že data pro vybrané sloupce budou (někdy) na různých stránkách. Být na jiné stránce může vést k další I/O operaci (pokud na druhé stránce nejsou vybrány žádné další řádky). V nejhorším případě může být každý vybraný sloupec na jiné stránce.

Zde je příklad:

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)
);

Porovnání:vyberte num1, num2, num3 z bad_layout;vyberte num1, num2, num3 z better_layout;

Protože pro bad_layout bude každý sloupec num v podstatě na jiné stránce, bude každý řádek vyžadovat 3 vstupně-výstupní operace. Naopak pro better_layout bude počet sloupců obvykle na stejné stránce.

Spuštění dotazu bad_layout bude pravděpodobně trvat asi třikrát déle.

Dobré rozložení tabulky může mít velký vliv na výkon dotazů. Měli byste se pokusit ponechat sloupce, které jsou obvykle vybírány pohromadě, co nejblíže u sebe v rozložení tabulky.



  1. 3 způsoby, jak získat první den v měsíci na serveru SQL

  2. Nelze se připojit k MySQL z Java:NullPointerException uvnitř logiky připojení ovladače MySQL

  3. Jak napsat REST API?

  4. Klauzule Oracle SQL Where k vyhledání datových záznamů starších než 30 dní