Таблицы

Применимо к: даSQL Server 2016 (13.x); и более поздние версии ДаБаза данных SQL Azure ДаУправляемый экземпляр SQL Azure даAzure Synapse Analytics даПараллельное хранилище данных

Таблицы являются объектами, которые содержат все данные в базах данных. В таблицах данные логически организованы в виде строк и столбцов по аналогии с электронной таблицей. Каждая строка представляет собой уникальную запись, а каждый столбец — поле записи. Например, таблица, содержащая данные о сотрудниках компании, может иметь строку для каждого сотрудника и столбцы, представляющие сведения о сотрудниках (например, его идентификационный номер, имя, адрес, должность и номер домашнего телефона).

  • Число таблиц в базе данных ограничено только числом объектов доступных в базе данных (2 147 483 647). Стандартная определяемая пользователем таблица может содержать до 1 024 столбцов. Число строк и общий размер таблицы ограничиваются только пространством для хранения на сервере.

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

  • Данные в таблице могут быть сжаты либо по строкам, либо по страницам. Сжатие данных может позволить отображать больше строк на странице. Дополнительные сведения см. в разделе Data Compression.

Типы таблиц

Кроме стандартной роли обычных определяемых пользователем таблиц в SQL Server предусмотрены следующие типы таблиц, служащих особым целям в базе данных.

Секционированные таблицы

Секционированные таблицы — это таблицы, данные которых горизонтально разделены на блоки, которые могут быть распределены между несколькими файловыми группами в базе данных. Секционирование делает большие таблицы и индексы более управляемыми, позволяет быстро и эффективно получать доступ к наборам данных и управлять ими, при этом сохраняя целостность всей коллекции. В SQL Server по умолчанию поддерживается до 15 000 секций. Дополнительные сведения см. в разделе Partitioned Tables and Indexes.

Временные таблицы

Темпоральные таблицы хранятся в базе данных tempdb. Существует два вида временных таблиц: локальные и глобальные. Они отличаются друг от друга именами, видимостью и доступностью. Имена локальных временных таблиц начинаются с одного символа (#); они видны только текущему соединению пользователя и удаляются, когда пользователь отключается от экземпляра SQL Server. Временные глобальные таблицы начинаются с двух символов номера (##); они видны любому пользователю и удаляются, когда все пользователи, которые на них ссылаются, отключаются от экземпляра SQL Server.

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

SQL Server 2019 (15.x) при всех уровнях совместимости базы данных сокращает число повторных компиляций для рабочих нагрузок с использованием темпоральных таблиц в нескольких областях. Эта функция также включена в базе данных SQL Azure на уровне совместимости базы данных 150 для всех моделей развертывания. До этого выпуска при ссылке на временную таблицу в инструкции на языке обработки данных DML (SELECT, INSERT, UPDATE, DELETE), если таблица была создана пакетом во внешней области, происходила повторная компиляция инструкции DML при каждом выполнении. В рамках этого улучшения SQL Server выполняет дополнительные упрощенные проверки, чтобы избежать ненужных перекомпиляций:

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

Конечным результатом является снижение числа лишних перекомпиляций и нагрузки на ЦП.

Системные таблицы

SQL Server хранит данные, определяющие конфигурацию сервера и всех его таблиц, в специальном наборе таблиц, которые называются системными. Пользователи не могут напрямую выполнить запрос или обновление системных таблиц. Данные из системных таблиц доступны через системные представления. Дополнительные сведения см. в разделе Системные представления (Transact-SQL).

Широкие таблицы

В широких таблицах используются разреженные столбцы , что позволяет увеличить общее количество столбцов в таблице до 30 000. Разреженные столбцы — это обычные столбцы, имеющие оптимизированное хранилище для значений NULL. Разреженные столбцы уменьшают пространство, необходимое для хранения значений NULL, однако увеличивается стоимость получения значений, отличных от NULL. В широкой таблице определен набор столбцов, который представляет собой нетипизированное XML-представление, в котором все разреженные столбцы таблицы объединены в структурированные выходные данные. Количество индексов и статистик также увеличивается до 1000 и 30 000 соответственно. Максимальный размер строки широкой таблицы — 8 019 байт. Таким образом, большинство данных в любой строке должны составлять значения NULL. Максимальным числом неразряженных и вычисляемых столбцов в широкой таблице остается 1024.

Широкие таблицы влияют на производительность следующим образом.

  • Широкие таблицы увеличивают затраты на обслуживание индексов для таблицы. Рекомендуется ограничить количество индексов широкой таблицы только теми, которые необходимы для бизнес-логики. С ростом числа индексов возрастает время компиляции DML и требования к памяти. Некластеризованные индексы должны быть отфильтрованными индексами, применяющимися к подмножествам данных. Дополнительные сведения см. в разделе Create Filtered Indexes.

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

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

  • В широкой таблице следует ограничить выполнение инструкций DML, обновляющих несколько строк ключа кластеризации. Для компиляции и выполнения этих инструкций может потребоваться значительный объем ресурсов.

  • Операции по переключению секций в широких таблицах могут выполняться медленно. Для их выполнения может потребоваться значительный объем памяти. Требования к производительности и памяти пропорциональны общему количеству столбцов в исходной и целевой секциях.

  • Курсоры обновления, обновляющие определенные столбцы в широкой таблице, должны явно перечислять столбцы в предложении FOR UPDATE. Это поможет оптимизировать производительность при использовании курсоров.

Обобщенные табличные задачи

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

Табличные задачи Раздел
Описание процесса создания таблицы. Создание таблиц (ядро СУБД)
Описание процесса удаления таблицы. Удаление таблиц (ядро СУБД)
Описание способов создания новой таблицы, которая содержит несколько или все столбцы существующей таблицы. Дублирование таблиц
Описывает процесс переименования таблицы. Переименование таблиц (ядро СУБД)
Описание процесса просмотра свойств таблицы. Просмотр определения таблицы
Описывает, как определить, находятся ли в зависимости от таблицы другие объекты, например представление или хранимая процедура. Просмотр зависимостей таблицы

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

Задачи столбца Раздел
Описывает добавление столбцов в существующую таблицу. Добавление столбцов в таблицу (ядро СУБД)
Описывает процесс удаления столбца из таблицы. Удаление столбцов из таблицы
Описывает изменение имени столбца. Переименование столбцов (ядро СУБД)
Описывает копирование столбцов из одной таблицы в другую, когда копируется либо только определение столбца, либо определение и данные. Копирование столбцов из одной таблицы в другую (ядро СУБД)
Описывает изменение описания столбца путем изменения типа данных или другого свойства. Изменение столбцов (компонент Database Engine)
Описывает изменение порядка, в котором отображаются столбцы. Изменение порядка столбцов в таблице
Описывает создание вычисляемого столбца в таблице. Указание вычисляемых столбцов в таблице
Описывает, как установить значение по умолчанию для столбца. Это значение используется, если другое значение не предоставлено. Указание значений по умолчанию для столбцов

См. также

Ограничения уникальности и проверочные ограничения Ограничения первичных и внешних ключей