Spec-Zone.ru › MySQL 8.4

18.2.3.2 Характеристики динамических таблиц

Динамический формат хранения используется, если таблица MyISAM содержит столбцы переменной длины (VARCHAR, VARBINARY, BLOB или TEXT), или если таблица была создана с опцией ROW_FORMAT=DYNAMIC таблицы.

Динамический формат немного сложнее статического, так как каждая строка имеет заголовок, указывающий её длину. Строка может быть фрагментирована (храниться в несмежных частях) при увеличении длины в результате обновления.

Для дефрагментации таблицы можно использовать OPTIMIZE TABLE или myisamchk -r. Если в таблице с переменной длиной столбцов часто обращаются или изменяются столбцы фиксированной длины, возможно, стоит переместить столбцы переменной длины в другие таблицы, чтобы избежать фрагментации.

Динамические таблицы обладают следующими характеристиками:

  • Все строковые столбцы динамические, за исключением тех, длина которых меньше четырёх.

  • Каждая строка предваряется битовой картой, которая указывает, какие столбцы содержат пустую строку (для строковых столбцов) или ноль (для числовых столбцов). Это не включает столбцы, содержащие NULL значения. Если длина строкового столбца равна нулю после удаления хвостовых пробелов или значение числового столбца равно нулю, это отмечается в битовой карте и не сохраняется на диске. Непустые строки сохраняются как байт длины плюс содержимое строки.

  • NULL столбцы требуют дополнительного места в строке для записи того, являются ли их значения NULL. Каждый NULL столбец занимает один дополнительный бит, округленный до ближайшего байта.

  • Обычно требуется меньше места на диске, чем для таблиц с фиксированной длиной.

  • Каждая строка использует только необходимое место. Однако, если строка становится больше, она разбивается на необходимое количество частей, что приводит к фрагментации строки. Например, если вы обновите строку информацией, которая увеличивает её длину, строка фрагментируется. В этом случае может потребоваться периодически запускать OPTIMIZE TABLE или myisamchk -r для повышения производительности. Используйте myisamchk -ei для получения статистики таблицы.

  • Восстановление после сбоя сложнее, чем для таблиц со статическим форматом, потому что строки могут быть фрагментированы на множество частей, и ссылки (фрагменты) могут отсутствовать.

  • Ожидаемая длина строки для динамических строк вычисляется по следующему выражению:

    3
    + (number of columns + 7) / 8
    + (number of char columns)
    + (packed size of numeric columns)
    + (length of strings)
    + (number of NULL columns + 7) / 8
    

    Затраты составляют 6 байтов за каждую ссылку. Динамическая строка ссылается, когда обновление приводит к увеличению длины строки. Каждый новый фрагмент занимает не менее 20 байтов, поэтому последующее увеличение, скорее всего, происходит в той же ссылке. Если нет, создается другая ссылка. Вы можете найти количество ссылок с помощью myisamchk -ed. Все ссылки могут быть удалены с помощью OPTIMIZE TABLE или myisamchk -r.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/dynamic-format.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API