Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Szybkość zapytań na podstawie kolejności kolumn

Odpowiedź brzmi:tak, to ma znaczenie i może mieć ogromne znaczenie, ale zazwyczaj niewiele.

Wszystkie operacje we/wy są wykonywane na poziomie strony (zazwyczaj 2K lub 4K w zależności od systemu operacyjnego). Dane kolumn dla wierszy są przechowywane obok siebie, z wyjątkiem sytuacji, gdy strona jest pełna, w którym to przypadku dane są zapisywane na innej (zwykle następnej) stronie.

Im większa przestrzeń na dane na dysku wymagana dla kolumn pomiędzy (na podstawie definicji tabeli) kolumnami, które wybierzesz, tym większa szansa, że ​​dane dla wybranych kolumn będą (czasami) znajdować się na różnych stronach. Przebywanie na innej stronie może skutkować dodatkową operacją we/wy (jeśli na drugiej stronie nie wybrano innych wierszy). W najgorszym przypadku każda wybrana kolumna może znajdować się na innej stronie.

Oto przykład:

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

Porównywanie:wybierz num1, num2, num3 z bad_layout;wybierz num1, num2, num3 z better_layout;

Ponieważ w przypadku bad_layout każda kolumna num będzie zasadniczo znajdować się na innej stronie, każdy wiersz będzie wymagał 3 operacji we/wy. I odwrotnie, dla better_layout liczba kolumn zwykle będzie znajdować się na tej samej stronie.

Wykonanie zapytania bad_layout prawdopodobnie potrwa około 3 razy dłużej.

Dobry układ tabeli może mieć duży wpływ na wydajność zapytań. Powinieneś starać się, aby kolumny, które są zwykle wybierane razem, były jak najbliżej siebie w układzie tabeli.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. XAMPP — nieoczekiwane zamknięcie MySQL

  2. MYSQL niepoprawny format DATETIME

  3. LOAD DATA INFILE Kod błędu:13

  4. Dlaczego zmiana nazwy kolumny w mysql zajmuje tak dużo czasu?

  5. PHP Wiązanie symbolu wieloznacznego