Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу ИСиТ.docx
Скачиваний:
6
Добавлен:
07.02.2024
Размер:
1.07 Mб
Скачать

Правила столбцов секционирования

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

  • Диапазон ключа проверочных ограничений в таблице не должен пересекаться с диапазонами любой другой таблицы. Любое значение столбца секционирования должно быть сопоставленным только с одной таблицей. Проверочные ограничения могут использовать только следующие операторы: BETWEEN, IN, AND, OR, <, <=, >, >=, =.

  • Столбец секционирования не может быть столбцом с автоматическим приращением, столбцом со значением по умолчанию или столбцом типа timestamp.

  • Столбец секционирования должен находиться в одинаковом порядковом расположении в списках выборки всех инструкций SELECT в представлении.

  • Столбец секционирования не может содержать значения NULL.

  • Столбец секционирования должен быть частью первичного ключа таблицы.

  • Столбец секционирования не может быть вычисляемым столбцом.

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

  • Ограничения для обновления столбца секционирования отсутствуют.

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

Условия изменения данных в секционированных представлениях

На инструкции, изменяющие секционированные представления, распространяются следующие ограничения:

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

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

  • В предложении SET инструкции UPDATE в качестве значения не может быть указано ключевое слово DEFAULT, даже если столбец имеет значение DEFAULT, определенное в соответствующей таблице-элементе.

  • Столбцы PRIMARY KEY не могут быть изменены при помощи инструкции UPDATE, если таблицы-элементы включают столбцы типов text, ntext или image.

  • Столбец представления, который является столбцом идентификаторов в одной или нескольких таблицах-элементах, не может быть изменен при помощи инструкции INSERT или UPDATE.

  • Если одна из таблиц-элементов содержит столбец timestamp, представление не может быть изменено при помощи инструкции INSERT или UPDATE.

  • Если одна из таблиц-элементов содержит триггер, ограничение ON UPDATE CASCADE/SET NULL/SET DEFAULT или ограничение ON DELETE CASCADE/SET NULL/SET DEFAULT, то представление не может быть изменено.

  • Выполнение операций INSERT, UPDATE и DELETE для секционированного представления не допускается, если осуществляется самосоединение с тем же представлением или с какой-либо из таблиц-элементов, указанных в инструкции.

  • Массовый импорт данных в секционированное представление не поддерживается программой bcp и инструкциями BULK INSERT и INSERT... SELECT * FROM OPENROWSET(BULK...).

Детерминированные и недетерминированные функции

  • SQL Server 2008

  • SQL Server 2005

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

Определяемые пользователями функции имеют несколько свойств, определяющих способность ядра SQL Server Database Engine индексировать результаты функции как с помощью индексов вычисляемых столбцов, вызывающих функцию, так и с помощью индексированных представлений, которые на нее ссылаются. Детерминизм функции - одно из таких свойств. Например, в представлении нельзя создать кластеризованный индекс, если оно ссылается на какие-либо недетерминированные функции.

Детерминизм встроенных функций

На детерминизм встроенных функций повлиять нельзя. Каждая из них детерминирована или недетерминирована в зависимости от реализации в SQL Server.

Все статистические и строковые встроенные функции детерминированы

Следующие встроенные функции, отличные от функций статистических и строковых, всегда детерминированы.

ABS

DATEDIFF

POWER

ACOS

DAY

RADIANS

ASIN

DEGREES

ROUND

ATAN

EXP

SIGN

ATN2

FLOOR

SIN

CEILING

ISNULL

SQUARE

COALESCE

ISNUMERIC

SQRT

COS

LOG

TAN

COT

LOG10

YEAR

DATALENGTH

MONTH

DATEADD

NULLIF

 

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

CAST

Детерминирована, кроме случаев использования с datetime, smalldatetime или sql_variant.

CONVERT

Детерминирована, кроме следующих случаев:

  • Исходный тип - sql_variant.

  • Конечный тип - sql_variant, и его исходный тип недетерминирован.

  • Исходный или конечный тип — datetime или smalldatetime, другой исходный или конечный тип — строка символов, и задан недетерминированный стиль. Чтобы быть детерминированным, параметр стиля должен быть константой.

CHECKSUM

Детерминирована, за исключением CHECKSUM(*).

ISDATE

Детерминирована, только если используется с функцией CONVERT, при этом задан аргумент стиля CONVERT.

RAND

Функция RAND детерминирована, только если аргумент seed определен.

Все функции конфигурации, курсора, метаданных, безопасности и системные статистические - недетерминированные.

Функции, вызывающие расширенные хранимые процедуры, недетерминированы, так как расширенные хранимые процедуры могут оказать на базу данных побочное действие. Побочные действия - это такое изменение глобального состояния базы данных, как обновление таблицы, внешнего сетевого ресурса или файла.

Соседние файлы в предмете Информатика