MySQL Row Format: Различие между фиксированным и динамическим?

Из вопроса мы не можем видеть структуру входного массива. Это может быть array ('id' => 10499478683521864, 'date' => '07/22/1983'). Поэтому, когда вы запрашиваете $ demo [0], вы используете индекс undefind.

Array_values ​​потеряли ключи и возвратили массив с многочисленными ключами, делающими массив как array(10499478683521864, '07/22/1983'...). Этот результат мы видим в вопросе.

Итак, вы можете взять значения элемента массива таким же образом

echo array_values($get_user)[0]; // 10499478683521864 
47
задан moo 29 September 2008 в 02:25
поделиться

4 ответа

Различие действительно только имеет значение для MyISAM, другие механизмы устройства хранения данных не заботятся о различии. РЕДАКТИРОВАНИЕ: Многие пользователи прокомментировали, что InnoDB действительно заботится: ссылка 1 steampowered, ссылка 2 Kaan.

С MyISAM с фиксированными строками ширины, существует несколько преимуществ:

  1. Никакая фрагментация строки: возможно со строками переменной ширины разделить единственные строки на несколько разделов через файл данных. Это может увеличить поиск на диске и замедлить операции. Возможно дефрагментироваться, это с ОПТИМИЗИРУЕТ ТАБЛИЦУ, но это не всегда практично.

  2. размер указателя Файла данных: В MyISAM существует понятие указателя файла данных, который используется, когда это должно сослаться на файл данных. Например, это используется в индексах, когда они относятся туда, где строка на самом деле присутствует. С фиксированными размерами ширины этот указатель основан на смещении строки в файле (т.е. строки равняются 1, 2, 3 независимо от их размера). С переменной шириной указатель основан на байтовом смещении (т.е. строки могли бы быть 1, 57, 163). Результат состоит в том, что с большими таблицами, указатель должен быть больше, который тогда добавляет потенциально намного больше служебный к таблице.

  3. Легче зафиксировать в случае повреждения. Так как каждая строка является тем же размером, если Ваша таблица MyISAM повреждается, намного легче восстановить, таким образом, Вы только потеряете данные, которые на самом деле повреждаются. С переменной шириной в теории возможно, что указатели переменной ширины испорчены, который может привести к промыванию данных плохим способом.

Теперь основной недостаток фиксированной ширины состоит в том, что она тратит впустую больше пространства. Например, необходимо использовать поля CHAR вместо полей VARCHAR, таким образом, Вы заканчиваете с поднятым дополнительным пространством.

Обычно, у Вас не будет большого выбора в формате, так как это диктуют на основе схемы. Однако это могло бы стоить, если у Вас только есть некоторые varchar's или единственный блоб/текст, чтобы попытаться оптимизировать к этому. Например, рассмотрите переключение единственного varchar в символ или разделите блоб на свою собственную таблицу.

можно читать еще больше об этом в:

http://dev.mysql.com/doc/refman/5.0/en/static-format.html

http://dev.mysql.com/doc/refman/5.0/en/dynamic-format.html

58
ответ дан Jiyan Akgül 7 November 2019 в 23:23
поделиться

Одно основное отличие происходит при обновлении записи. Если формат строки фиксируется, нет никакого изменения в длине записи. Напротив, если формат строки является динамичным, и новые данные заставляют запись увеличиваться в длине, ссылка используется для указания на данные "переполнения" (т.е. это назвало указатель на область переполнения).

Это фрагментирует таблицу и обычно замедляет вещи. Существует команда для дефрагментации (ОПТИМИЗИРУЙТЕ ТАБЛИЦУ), который несколько смягчает проблему.

10
ответ дан Ben Hoffstein 7 November 2019 в 23:23
поделиться

Фиксированный означает, что каждая строка является точно тем же размером. Это означает, что, если 3-я строка на странице данных должна быть загружена, это будет в точно PageHeader+2*RowSize, сохраняя некоторое время доступа.

для нахождения начала динамической записи, со списком рекордных смещений нужно консультироваться, который включает дополнительную косвенность.

Короче говоря, да, существует небольшой хит производительности для динамических строк. Нет, это не очень большое. Если Вы думаете, что это будет проблема, тест для него.

4
ответ дан Jonathan Rupp 7 November 2019 в 23:23
поделиться

Зафиксированный должно быть быстрее и более безопасным, чем динамичный, с недостатком наличия фиксированного символа-lenght. Можно найти эту информацию здесь: http://dev.mysql.com/doc/refman/5.0/en/static-format.html

1
ответ дан jmissao 7 November 2019 в 23:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: