Есть ли лучший способ упорядочивания столбцов базы данных? - PullRequest
4 голосов
/ 21 апреля 2009

Есть ли рекомендации по упорядочению столбцов при проектировании базы данных? Будет ли порядок влиять на производительность, пространство или уровень ORM?

Мне известно о SQL Server - имеет ли значение порядок столбцов? . Я ищу более общий совет.

Ответы [ 7 ]

14 голосов
/ 21 апреля 2009

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

Я видел, что у таблиц есть поля, упорядоченные по алфавиту, а также "логически" (таким образом, что имеет смысл для представляемых данных). В целом, я вижу преимущества в обоих случаях, но я бы предпочел использовать «логический» метод.

4 голосов
/ 08 мая 2009

В Oracle может значительно сэкономить место на диске, если в вашей таблице есть несколько столбцов NULLable, а столбцы NULLable помещены в конец списка. Значения NULL в конце строки не занимают пробела.

например. представьте себе эту таблицу: (id NOT NULL, name VARCHAR2(100), surname VARCHAR2(100), blah VARCHAR2(100, date_created DATE NOT NULL)

строке (100, NULL, NULL, NULL, '10-JAN-2000') потребуется хранилище для значений 100, некоторое пространство для трех NULL, а затем дата.

В качестве альтернативы, та же таблица, но с другим порядком: (id NOT NULL, date_created DATE NOT NULL, name VARCHAR2(100), surname VARCHAR2(100), blah VARCHAR2(100))

строка (100, '10-JAN-2000', NULL, NULL, NULL) будет требовать хранения только для значений 100 и даты - завершающие NULL полностью опущены.

Обычно это не имеет большого значения, но для очень больших таблиц со многими столбцами NULL может быть достигнута значительная экономия - меньше используемого пространства может преобразовать в большее количество строк в блоке, что означает меньшее количество операций ввода-вывода и ЦП, необходимых для запроса таблицы.

3 голосов
/ 21 апреля 2009

порядок столбцов имеет значение только в составном индексе

Если ваш индекс включен (Фамилия, имя), и вы всегда ищете фамилию, тогда вы можете идти, даже если вы не включили имя

если ваш индекс выглядит следующим образом (Имя, Фамилия) и ваше предложение where равно

where lastname like 'smith%'

тогда вам нужно отсканировать весь индекс

3 голосов
/ 21 апреля 2009

Я думаю, что ответ - нет.

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

3 голосов
/ 21 апреля 2009

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

Не думаю, что это повлияет на производительность, но с позиции разработчика легче прочитать первые несколько столбцов, которые будут часто обновляться, чем пытаться сканировать таблицу отверстий для этого одного поля в конце.

1 голос
/ 22 апреля 2009

При проектировании базы данных я бы, вероятно, поместил наиболее важные столбцы на первом месте в логическом порядке (например, поле id, имя, отчество, фамилия). Это облегчает их просмотр, когда вы ищете столбцы, которые вам нужны больше всего из длинного списка столбцов.

Однако я бы не стал позже переставлять столбцы для поддержки более логичной группировки.

1 голос
/ 21 апреля 2009

Более общий совет на самом деле недоступен, так как вы запрашиваете детали реализации, а не стандарт SQL.

Разные СУБД будут реализовывать эти вещи по-разному.

Однако, умная СУБД будет реализовывать внутренние компоненты так, чтобы упорядочение столбцов не имело значения.

Поэтому я бы приказал, чтобы мои колонки были интуитивно понятными для людей.

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