Должны ли текстовые поля переменной длины базы данных иметь степень 2? - PullRequest
6 голосов
/ 17 октября 2008

Мой друг утверждает, что в типичной базе данных использование (например) nvarchar[256] даст чуть лучшую производительность, чем nvarchar[200] или nvarchar[250] из-за гранулярности распределения страниц.

Есть ли в этом какая-то правда?

Спасибо!

Ответы [ 5 ]

16 голосов
/ 17 октября 2008

Это не правда. Таблицы размещаются на диске в 8 тыс. Страниц. Когда таблица читается с диска, вся страница читается за одну операцию ввода-вывода и сохраняется в памяти. Следовательно, длина столбца никак не повлияет на выравнивание памяти. Фактически, с типами данных не переменной длины, определенно, чем короче, тем лучше: столбец nchar (200) допускает больше строк на страницу, чем столбец nchar (256). Это позволяет читать больше строк за один физический ввод-вывод, что может оказать драматическое влияние на производительность базы данных.

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

Во всяком случае, это, вероятно, хуже из-за перерасхода. Когда вы выделяете nvarchar (256), база данных, вероятно, включает в себя пару байтов для длины, поэтому требование к памяти может фактически быть 258.

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

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

Нет, нет.

1 голос
/ 19 октября 2008

Думайте об этом так: Если nvarchar [256] работает лучше, чем nvarchar [200], не будет ли СУБД просто создать nvarchar [256], когда вы запросите nvarchar [200]? (Но все же сделайте так, чтобы это выглядело как nvarchar [200])

Хорошие СУБД имеют очень продвинутые оптимизации. Я почти уверен, что у них есть и все простые.

1 голос
/ 19 октября 2008

Интересно, пришел ли ваш друг к какому-либо заключению самостоятельно или это был случай распространения мифа?

Том Кайт представляет отличную презентацию "Вещи, которую вы знаете", которую в основном должны смотреть все, прежде чем делать заявления, подобные приведенным выше: Вещи, которые вы знаете

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...