Mysql
 sql >> база данни >  >> RDS >> Mysql

Скорост на заявка въз основа на реда на колоните

Отговорът е да, има значение и може да има голямо значение, но обикновено не много.

Всички I/O се извършват на ниво страница (обикновено 2K или 4K в зависимост от вашата ОС). Данните в колоните за редове се съхраняват една до друга, освен когато страницата се запълни, в който случай данните се записват на другата (обикновено следващата) страница.

Колкото по-голямо е пространството за данни на диска, необходимо за колони между (въз основа на дефиницията на таблицата) колоните, които изберете, толкова по-голям е шансът данните за избраните колони (понякога) да бъдат на различни страници. Да бъдеш на друга страница може да доведе до допълнителна I/O операция (ако няма избрани други редове на другата страница). В най-лошия случай всяка избрана от вас колона може да е на различна страница.

Ето един пример:

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

Сравняване:изберете num1, num2, num3 от bad_layout; изберете num1, num2, num3 от по-добро_оформление;

Тъй като за bad_layout всяка колона num по същество ще бъде на различна страница, всеки ред ще изисква 3 I/O операции. Обратно, за better_layout броят колони обикновено ще бъдат на една и съща страница.

Изпълнението на заявката bad_layout вероятно ще отнеме около 3 пъти повече време.

Доброто оформление на таблицата може да има голяма разлика в производителността на заявките. Трябва да се опитате да поддържате колоните, които обикновено се избират заедно, възможно най-близо една до друга в оформлението на таблицата.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявка:Изтриване на всички записи от таблицата с изключение на последния N?

  2. Как мога да комбинирам две процедури в една, за да попълня една таблица, а не всяка от двете процедури да попълва собствената си таблица?

  3. Загубена връзка с MySQL сървър при опит за свързване с отдалечен MySQL сървър

  4. PHP извиквания на множество обектни функции

  5. Инсталиране на WordPress 5 на ZEIT сега с MySQL хостинг