Насколько более неэффективны тексты (blob), чем varchar / nvarchar? - PullRequest
6 голосов
/ 28 октября 2008

Мы создаем много больших, но простых форм для довольно большого проекта (около 600 пользователей используют его в течение дня - по крайней мере, для меня это большое ;-)).

В формах много разделов типа вопрос / ответ, поэтому для некоторых людей вполне естественно напечатать предложение, а для других - роман. Насколько выгодно было бы ограничить число символов в некоторых из этих полей действительно ?

(Пожалуйста, включите ссылки или цитаты, если необходимо / возможно - Спасибо!)

Ответы [ 5 ]

5 голосов
/ 28 октября 2008

Если у вас нет ограничений на размер данных, то зачем беспокоиться. Это не похоже на критически важный проект, даже с 600 пользователями и несколькими тысячами записей. Используйте CLOB / BLOB и покончите с этим. У меня есть сомнения относительно того, увидите ли вы какие-либо существенные выгоды от ограничения размеров и риска потери данных. Тем не менее, вы должны расположить такие границы перед реализацией.

Обычно varchar лучше всего подходит для хранения значений, которые вы хотите использовать логически, и для сравнения «целых значений». Текст для неструктурированных данных. Если ваш проект является результатом опроса с неструктурированным текстом, используйте CLOB / BLOB

Полу-ссылка: иногда я работаю с сотнями тысяч записей в колл-центре, где мы используем CLOB для хранения диалога между сотрудниками и клиентами.

3 голосов
/ 02 декабря 2008

Вы не упоминаете, какой сервер sql вы используете

Если вы используете MySql, есть определенные преимущества в скорости использования полей фиксированной длины для сохранения таблицы в статическом режиме, однако, если у вас есть какие-либо поля переменной ширины, таблица переключится на динамический, и вы потеряете преимущество указания длины поля.

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

Microsoft SQL Server имеет аналогичный прирост производительности при использовании столбцов фиксированной длины. При использовании столбцов фиксированной длины сервер точно знает, каковы смещение и длина данных в строке. В случае столбцов переменной длины сервер знает смещение, но должен хранить фактическую длину данных в виде предыдущего 2-байтового счетчика. Это имеет несколько последствий, которые обсуждаются в этой интересной статье , в которой обсуждается производительность как функция дискового пространства и преимущества столбцов переменной длины.

Если вы используете SQL Server 2005 или новее, вы можете воспользоваться varchar (max). Этот тип столбца имеет те же 2 ГБ хранилища больших двоичных объектов, но данные хранятся в виде фрагментов 8 КБ со страницами данных таблицы, а не в отдельном хранилище. Таким образом, вы получаете преимущество большого размера: используйте только 8 КБ на своих страницах одновременно, быстрый доступ к базе данных и те же семантики запросов, которые работают с другими типами столбцов, работают с varchar (max).

В конце концов, указание максимальной длины для столбца переменной в основном позволяет вам ограничить размер базы данных. Как только вы используете столбцы переменной длины, вы теряете преимущество строк фиксированного размера, и varchar (max) будет работать так же, как varchar (10), при хранении того же объема данных.

3 голосов
/ 28 октября 2008

Я говорю, сосредоточиться на потребностях пользователей и беспокоиться о проблемах производительности базы данных только тогда, когда они возникают. Спросите себя, «выиграют ли мои пользователи, если я ограничу количество данных, которые они могут ввести».

Я держу на своей стене большой мультфильм, который говорит: «Это не то, что делает программное обеспечение. Это то, что делает пользователь».

2 голосов
/ 28 октября 2008

blob и text / ntext хранятся вне контекста строки, и сохраняется только ссылка на объект, что приводит к уменьшению размера строки, что повысит производительность кластеризованных индексов.

Однако, поскольку текст / ntext не сохраняются вместе со строкой, получение данных занимает больше времени, и эти поля нельзя использовать ни в каких операторах сравнения.

0 голосов
/ 28 октября 2008

из: http://www.making -the-web.com / 2008/03/24 / экономия байтов-эффективное-хранение-данных-mysql-part-1 /

Существует несколько вариантов типов TEXT и BLOB, которые влияют на размер; они:

Type -                      Maximum Length -Storage
TINYBLOB, TINYTEXT          255             Length+1 bytes
BLOB, TEXT                  65535           Length+2 bytes
MEDIUMBLOB, MEDIUMTEXT      16777215        Length+3 bytes
LONGBLOB, LONGTEXT          4294967295      Length+4 bytes
...