Поделиться через


Таблицы

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

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

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

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

Типы таблиц

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Табличные задачи

Раздел

Описание процесса создания таблицы.

Создание таблиц (компонент Database Engine)

Описание процесса удаления таблицы.

Удаление таблиц (компонент Database Engine)

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

Дублирование таблиц

Описывает процесс переименования таблицы.

Переименование таблиц (компонент Database Engine)

Описание процесса просмотра свойств таблицы.

Просмотр определения таблицы

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

Просмотр зависимостей таблицы

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

Задачи столбца

Раздел

Описывает добавление столбцов в существующую таблицу.

Добавление столбцов в таблицу (компонент Database Engine)

Описывает процесс удаления столбца из таблицы.

Удаление столбцов из таблицы

Описывает изменение имени столбца.

Переименование столбцов (компонент Database Engine)

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

Копирование столбцов из одной таблицы в другую (компонент Database Engine)

Описывает изменение описания столбца путем изменения типа данных или другого свойства.

Изменение столбцов (компонент Database Engine)

Описывает изменение порядка, в котором отображаются столбцы.

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

Описывает создание вычисляемого столбца в таблице.

Указание вычисляемых столбцов в таблице

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

Указание значений по умолчанию для столбца

См. также

Основные понятия

Ограничения первичных и внешних ключей

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