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

Трябва ли VARCHAR колоните да се поставят в края на дефинициите на таблици в MySQL?

Задаването на този въпрос относно "MySQL" не е полезно, тъй като MySQL прехвърля съхранението към машини за съхранение и те прилагат съхранението по много различни начини. Има смисъл да зададете този въпрос за всеки отделен механизъм за съхранение.

В механизма MEMORY типовете данни с променлива дължина не съществуват. VARCHAR се променя безшумно в CHAR. В контекста на вашия въпрос:Няма значение къде в дефиницията на таблица ще поставите своя VARCHAR.

В механизма MyISAM, ако дадена таблица няма никакви данни с променлива дължина (VARCHAR, VARBINARY или какъвто и да е тип TEXT или BLOB), тя е от ФИКСИРАНИЯ вариант на MyISAM, тоест записите имат фиксирана дължина на байта. Това може да има последици за производителността, особено ако данните се изтриват и вмъкват многократно (т.е. таблицата не се добавя само). Веднага щом всеки тип данни с променлива дължина е част от дефиницията на таблица, той става DYNAMIC вариант на MyISAM и MyISAM вътрешно променя всеки, освен най-краткия тип CHAR, вътрешно на VARCHAR. Отново позицията и дори дефиницията на CHAR/VARCHAR нямат значение.

В двигателя InnoDB данните се съхраняват на страници с размер 16 KB. Страницата има долен колонтитул на страница с контролна сума и горен колонтитул на страницата, наред с други неща, директория на страницата. Директорията на страницата съдържа за всеки ред отместването на този ред спрямо началото на страницата. Страницата също така съдържа свободно пространство и целият I/O се извършва в страници.

Следователно InnoDB може, стига да има свободно място в дадена страница, да увеличава VARCHAR на място и да премества редове вътре в страница, без да изисква допълнително I/O. Освен това, тъй като всички редове се адресират като (номер на страница, запис в директорията на страницата), движението на ред вътре в страницата се локализира към страницата и не се вижда отвън.

Това също така означава, че и за InnoDB редът на колоните вътре в реда няма никакво значение.

Това са трите механизма за съхранение, които се използват най-често с MySQL и редът на колоните няма значение за нито един от тези три. Възможно е да съществуват други, по-екзотични машини за съхранение, за които това не е вярно.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да класирате над дял в MySQL

  2. Как да създадете клас на модел на общ обект, който поддържа общ идентификатор, включително автоматично генерирани идентификатори?

  3. Хибернацията не създава таблица за присъединяване

  4. Начин за четене на таблични данни от Mysql към Pig

  5. Mysql конвертира int в MAC