Таблицы

Применимо к: SQL Server 2016 (13.x) и более поздних версий Azure SQL Database Управляемый экземпляр SQL AzureAzure Synapse Analytics AnalyticsPlatform System (PDW)

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

  • Число таблиц в базе данных ограничено только числом объектов доступных в базе данных (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)
Описание процесса удаления таблицы. Удаление таблиц (компонент Database Engine)
Описание способов создания новой таблицы, которая содержит несколько или все столбцы существующей таблицы. Дублирование таблиц
Описывает процесс переименования таблицы. Переименование таблиц (компонент Database Engine)
Описание процесса просмотра свойств таблицы. Просмотр определения таблицы
Описывает, как определить, находятся ли в зависимости от таблицы другие объекты, например представление или хранимая процедура. Просмотр зависимостей таблицы

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

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

См. также

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