|
Программирование >> Программирование баз данных
также к изменению порядка следования данных в дополнительных столбцах на противоположный. Если же будет явно указано, что один столбец отсортирован по возрастанию, а другой - по убыванию, после чего произойдет изменение порядка следования данных во втором столбце на противоположный непосредственно в физически хранимых данных, то внезапно исчезает сама причина, по которой следовало бы перейти к использованию другого способа доступа к данным. В качестве краткого примера рассмотрим такое задание по составлению отчета, по условиям которого необходимо упорядочить список служащих по дате найма на работу, начиная с принятого на работу в самую последнюю очередь (в порядке по убыванию), но требуется упорядочить этот список по фамилиям (в порядке по возрастанию). При использовании предыдущих версий SQL Server потребовалось бы выполнить две операции, относящиеся к первому и ко второму столбцам. А поскольку современная версия позволяет управлять порядком сортировки физически хранимых данных, обеспечивается свобода выбора способа комбинирования столбцов, применяемых в процессе обработки. Вообще говоря, обычно не рекомендуется использовать опцию ASC/DESC (поскольку и в этом случае приходится учитывать проблемы обратной совместимости). Тем не менее ниже указаны ситуации, в которых обычно приходится отступать от этой рекомендации. Существует необходимость в использовании разных вариантов порядка сортировки по возрастанию и по убыванию в различных столбцах. Проблема обеспечения обратной совместимости не является актуальной. Опция include Опция INCLUDE представляет собой одно из самых удобных нововведений, впервые предложенных в версии SQL Server 2005. Назначение этой опции состоит в обеспечении лучшей поддержки так называемых охваченных запросов. Запрос рассматривается как охваченный , если все данные, которые должны быть получены в результате выполнения запроса, полностью представлены в используемом индексе. Если все необходимые данные уже содержатся в индексе, то нет необходимости переходить на страницу с самими данными; после того как в ходе выполнения операции доступа к данным произойдет переход на листовой уровень индекса, обнаруживается вся необходимая информация, поэтому дальнейший поиск может быть прекращен (а это влечет за собой значительное сокращение объема операций ввода-вывода). Опция INCLUDE позволяет указывать определенные столбцы в конструкции INCLUDE, а не указывать их только в конструкции ON. В таком случае СУБД SQL Server переносит содержимое указанных столбцов на листовой уровень индекса. Как уже было сказано, каждая строка на листовом уровне индекса соответствует строке данных, поэтому применение опции INCLUDE по существу равнозначно перемещению части исходных данных на листовой уровень индекса. Безусловно, изучение возможной области применения опции INCLUDE позволяет сделать вывод, что в действительности эту опцию имеет смысл применять только при создании некластеризованных индексов (кластеризованные индексы уже содержат данные на листовом уровне, поэтому для них нет смысла использовать рассматриваемую опцию). Рассмотрим, в чем состоит суть выполняемых при этом действий. Прежде всего, как будет еще не раз показано в этой книге, СУБД SQL Server прекращает работу сразу после того, как будут получены фактически требуемые результаты. Поэтому, если в СУБД SQL Server в процессе обработки индекса обнаруживается, что все необходимые данные могут быть получены без перехода к строке с действительными данными, то переход к выполнению операции чтения строки данных не выполняется (так как это бессмысленно). Включая в индекс конкретный столбец с помощью опции INCLUDE, можно охватить тот запрос, в котором используется данный конкретный индекс на листовом уровне, и обойтись без применения для перехода к странице с данными операций ввода-вывода, связанных с использованием указателя индекса. Но следует учитывать, что применение опции INCLUDE приводит и к отрицательным поспедствиям! Включение данных из отдельных столбцов в индекс с помощью опции INCLUDE влечет за собой увеличение размеров строк индекса листового уровня. Это вызывает уменьшение количества строк индекса, которые могут быть размещены на одной странице, поэтому для выборки одного и того же количества строк может потребоваться выполнение большего количества операций ввода-вывода. В результате может оказаться, что попытка ускорить выполнение одного запроса приведет к снижению быстродействия при выполнении других запросов. Поэтому необходимо выдерживать равновесие. Подумайте о том, какое влияние окажет применение опции INCLUDE на все компоненты вашей системы, а не только на тот конкретный запрос, который вы стремитесь реализовать в текущий момент. Опция with Опция WITH не требует особых пояснений, поскольку она применяется лишь для передачи СУБД SQL Server указания на то, что за ней последует одна р1ли несколько дополнительных опций. Опция pad index Среди опций, определяемых в списке WITH, опция PAD INDEX находится на первом месте, но после ознакомления с тем, для чего предназначена опция PAD INDEX, такой выбор места для ее определения кажется странным. Коротко можно отметить, что опция PAD INDEX определяет лишь то, насколько полным должно быть заполнение страниц индекса нелистовьгх уровней (в процентах) при первоначальном создании индекса. Однако не следует задавать процентное значение опции PAD INDEX, поскольку в качестве относительной величины заполнения используется процентное значение, заданное в опции FILLFACTOR, которая следует за ней. Применение значения параметра PAD INDEX = ON не имеет смысла, если не задана опция FILLFACTOR (именно поэтому кажется неоправданным решение поместить опцию PAD INDEX в начало списка опций). Опция fillfactor При первоначальном создании индекса в СУБД SQL Server страницы по умолчанию заполняются настолько, насколько это возможно, за вычетом двух строк, В качестве значения опции FILLFACTOR можно задать любое число от 1 до 100. Это число показывает, насколько полным должно стать заполнение страниц в процентах после завершения процесса создания индекса. Но следует учитывать, что при разбиении страниц данные все равно перераспределяются между двумя страницами в равных долях. Это означает, что в процессе эксплуатации базы данньгх невозможно постоянно сохранять контроль-над тем, в каком процентном отношении заполняются страницы индекса, иначе как путем регулярной перестройки индекса (а эту операцию действительно следует выполнять; информация о том, как подготовить график технического сопровождения для этой операции, приведена в главе 24). Опция FILLFACTOR применяется в тех случаях, когда требуется откорректировать используемое значение плотности заполнения страниц. Рекомендации по выбору значения этой опции приведены ниже. В системе OLTP рекомендуется применять низкие значения FILLFACTOR. В системе OLAP или в другой очень статичной системе (под этим подразумевается неподверженность системы изменениям, т.е. применение очень малого количества операций вставки и удаления) значение FILLFACTOR должно быть максимально возможным. В системе с небольшим относительным количеством транзакций, но более значительным количеством запросов, предназначенных для получения отчетов, по-видимому, следует выбирать какое-то промежуточное значение (не слишком низкое и не слишком высокое). Если значение опции FILLFACTOR не задано, то СУБД SQL Server полностью заполняет страницы, за вычетом двух строк; при этом минимальное количество строк составляет одну строку в расчете на одну страницу (например, если строка имеет длину 8 ООО символов, то на странице может поместиться только одна строка, поэтому условие, согласно которому должно оставаться свободное место для размещения двух строк, не применяется). Опция ignore dup key Опция IGNORE DUP KEY позволяет добиться чуть большего, чем просто обойти ограничения системы. Кратко можно отметить, что при использовании этой опции ограничение UNIQUE оказывает немного другое воздействие, чем в противном случае. При обычных обстоятельствах применение ограничения уникальности или уникального индекса приводит к тому, что не допускается вставка каких-либо дубликатов любого рода. В частности, если в транзакции предпринимается попытка создать дубликат на основе значения столбца, который определен как уникальный, то подобная попытка отвергается и производится откат транзакции. Но если задана опция IGNORE DUP KEY, то система действует немного иначе. Сообщение об ошибке все еще формируется, но возникающая при этом ошибка относится только к уровню предупреждения; тем не менее вставка строки все равно не выполняется. С точки зрения применения опции IGNORE DUP KEY последняя особенность, согласно которой вставка строки все равно не выполняется, имеет принципиальную важность. Дело в том, что дублирующаяся строка все равно отвергается, но для транзакции не формируется команда на выполнение отката (поскольку ошибка формируется как вызывающая предупреждающее сообщение, а не сообщение о критической ошибке). Необходимость в использовании этой опции может быть обусловлена тем, что должно быть обеспечено сохранение исключительно уникальных значений и вместе с тем предотвращены нарушения работы транзакций, в которых предпринимается попытка вставить дубликат. Каковым бы ни был процесс, в котором предпринимаются попытки вставить строку, рассматриваемую как дубликат, вполне возможно, что с точки зрения организации этого процесса фактически не имеет значения то, что эта строка - дублирующаяся (в связи с этим не возникают какие-либо логические ошибки).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |