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

Разбиране на структурата на записите на MyISAM

Информацията, която имате във въпроса относно MyISAM, е точно в целта. Въпреки това бих искал да отговоря на двата ви допълнителни въпроса:

ПОСЛЕДНИЯТ ВЪПРОС

Според Книгата

Глава 10:"Съхранителни машини" Страница 196 Параграф 7 казва

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

ДОПЪЛНИТЕЛЕН ВЪПРОС

От предишния ми отговор ще има много блокове, които имат

  • блок пространство
  • дължината на записа
  • броя на неизползваните байтове в блока
  • Индикаторни флагове за стойност NULL
  • евентуално указател към продължението на записа, ако записът не се вписва в създаденото по-рано пространство и трябваше да бъде разделен

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

ПРЕДЛОЖЕНИЯ

Форматът на ред по подразбиране на MyISAM е динамичен. Когато една таблица е динамична и има много INSERT, UPDATE и DELETE, такава таблица ще трябва да бъде оптимизирана с

OPTIMIZE TABLE mytable;

Има алтернатива:превключете формата на реда на таблицата на Фиксиран. По този начин всички редове са с еднакъв размер. Ето как правите формата на ред Фиксиран:

ALTER TABLE mytable ROW_FORMAT=Fixed;

Дори и с фиксиран формат на ред, трябва да се отдели време, за да се намери наличен запис, но времето ще бъде O(1) време за търсене (С думи на лаици, ще отнеме същото време, за да се намери наличен запис, без значение колко реда таблицата има или колко изтрити реда има). Можете да заобиколите тази стъпка, като активирате едновременно_вмъкване както следва:

Добавете това към my.cnf

[mysqld]
concurrent_insert = 2

Не се изисква рестартиране на MySQL. Просто бягайте

mysql> SET GLOBAL concurrent_insert = 2;

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

Предимство на таблиците с фиксирани редове

  • INSERT, UPDATE и DELETE ще бъдат малко по-бързи
  • SELECT са с 20-25% по-бързи

Ето някои от моите публикации за това, че SELECT е по-бърз за коригиране на формати на ред

Недостатък на таблиците с фиксиран ред

В повечето случаи, когато стартирате ALTER TABLE mytable ROW_FORMAT=Fixed; , таблицата може да нарасне с 80-100%. .MYI файл (индексни страници за таблицата MyISAM) също ще нарасне със същата скорост.

ЕПИЛОГ

Ако искате скорост за MyISAM таблици и можете да живеете с по-големи маси, ще са необходими моите алтернативни предложения. Ако искате да спестите място за всяка таблица MyISAM, оставете формата на реда както е (Динамичен). Ще трябва да компресирате таблицата с OPTIMIZE TABLE mytable; по-често с динамични таблици.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Система за препоръчани потребители, използваща PHP и MySQL

  2. MYSQL избира част от низ и подрежда по това парче

  3. Качете няколко изображения и съхранете пътя им в базата данни

  4. Ubuntu - 12.04 - MySql няма да стартира с помощта на услугата mysql start

  5. MAX функция в where клауза mysql