Varbinary vs Blob в MySQL
У меня есть около 2k необработанных двоичных данных, которые мне нужно хранить в таблице, но не знаю, следует ли выбирать тип Varbinary или Blob. Я прочитал описания в документах MySQL, но не нашел контракта и сравнил описания. Я также читал, что varbinary поддерживает только до 255 символов, но я успешно создал поле varbinary (2048), поэтому я немного смущен.
Двоичные данные не нужно индексировать, и мне не нужно запрашивать его. Есть ли преимущество использования одного типа над другим из PHP?
Спасибо!
Ответы
Ответ 1
VARBINARY
привязан к 255 байтам в MySQL 5.0.2 и ниже, до 65 КБ на 5.0.3 и выше.
BLOB
привязан к 65kB.
В конечном итоге VARBINARY
практически совпадает с BLOB
(с точки зрения того, что может быть сохранено в нем), если вы не хотите сохранить совместимость со "старыми" версиями MySQL. Документация MySQL говорит:
В большинстве случаев столбец BLOB
можно рассматривать как столбец VARBINARY
, который может быть как можно большим.
Ответ 2
На самом деле blob может быть больше (есть tinyblob, blob, mediumblob и longblob http://dev.mysql.com/doc/refman/5.0/en/storage-requirements.html) с точностью до 2 ^ 32 -1 на ограничение размера.
Также хранилище blob растет "снаружи" строки, в то время как максимальный размер varbinary связан с количеством свободного размера строки (поэтому он может быть меньше 64 КБ).
Существуют некоторые незначительные различия между обоими
1) С помощью сценариев индексирования (для блоков требуется размер префикса по индексам, varbinary - нет)
Http:/en/column-indexes.html
Тест CREATE TABLE (blob_col BLOB, INDEX (blob_col (10)));
2) Как уже упоминалось, в MySql 5.0.x или более ранних версиях между varbinary и blob по-разному управляются проблемы с пространством пробелов:
Http:///en/blob.html
Http:///en/binary-varbinary.html
(усечение ссылок, поскольку stackoverflow считает, что слишком много ссылок являются спамом)
Ответ 3
Одно существенное различие заключается в том, что типы blob хранятся во вторичном хранилище, а varbinaries хранятся inline в строке так же, как varchars и другие "простые" типы.
Это может повлиять на производительность в загруженной системе, где дополнительный поиск для извлечения и управления данными blob может быть дорогостоящим.
Ответ 4
Следует отметить, что механизм хранения памяти не поддерживает BLOB/TEXT, но он работает с VARBINARY.
Ответ 5
Я просто смотрю тестовое приложение, в котором хранится около 5 тыс. двоичных данных в столбце. Первоначально он использовался varbinary, но поскольку он так медленно, я решил попробовать blob. Ну, я смотрю на скорость записи на диске с помощью atop и не вижу никакой разницы.
Единственное существенное отличие, которое я прочитал в руководстве mysql, заключается в том, что blobs не поддерживается модулем памяти, поэтому любые временные таблицы, которые вы создаете с запросами (см., когда mysql использует temp таблицы) будет создан на диске, и это будет намного медленнее.
Поэтому вам лучше делать ставку на varbinary/binary, если он достаточно короткий, чтобы вписаться в строку (на данный момент 64k для всех столбцов).