SQL Server - имеет значение порядок столбцов?

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

  • При построении таблицы в SQL Server важно, какой порядок я помещаю в столбцы?
  • Имеет ли значение, является ли мой первичный ключ первым столбцом?
  • При построении многопоточного индекса имеет значение, если соседние столбцы?
  • Используя синтаксис ALTER TABLE, можно ли указать, в какой позиции я хочу добавить столбец?
    • Если нет, как я могу переместить столбец в разную позицию?

Ответ 1

В SQL Server 2005 размещение столбцов с нулевой переменной длины имеет косвенное влияние - размещение столбцов с допустимым значением переменной NULL в конце определения может привести к меньшему потреблению пространства.

SQL Server 2008 добавляет функцию столбца "SPARSE", которая отрицает эту разницу.

Смотрите здесь.

Ответ 2

Я бы сказал, что ответ на все эти вопросы НЕТ, хотя мой опыт работы с MS-SQL доходит до SQL2000. Может быть, другая история в SQL2005

Ответ 3

Для четвертой пули: Нет, вы не можете указать, где вы хотите добавить столбец. Вот синтаксис для ALTER TABLE: https://msdn.microsoft.com/en-us/library/ms190273.aspx

В MySQL они предлагают ALTER TABLE ADD... ПОСЛЕ... но это не отображается в T-SQL.

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

Изменить: для последней последней маркерной точки вам придется ОБРАТИТЬ таблицу и воссоздать ее для изменения порядка столбцов. Некоторые графические инструменты, которые манипулируют базами данных SQL, сделают это для вас и сделают это похожим на то, что вы переупорядочиваете столбцы, поэтому вам может понадобиться изучить это.

Ответ 4

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

Ответ 5

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

Ответ 6

Для первой пули:

Да, порядок столбцов имеет значение, по крайней мере, если вы используете устаревшие BLOB image, text или ntext и используя SQL Server <= 2005.

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

Если вы извлекаете данные из такой таблицы с помощью DAL, это идеальное место для шаблона Lazy Load.