Студопедия — Создание, модификация и удаление хранимых процедур средствами T-SQL
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Создание, модификация и удаление хранимых процедур средствами T-SQL






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

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

Одним из достоинств хранимых процедур является возможность их многократной модификации без необходимости изменения кода использующих их приложений. Наиболее удобный способ изменения кода хранимой процедуры предоставляет утилита Enterprise Manager. Для этого достаточно дважды щелкнуть на требуемой процедуре и в появившемся окне (см. рис. 26.1) отредактировать ее код. Когда все изменения будут сделаны, достаточно нажать на кнопку Check Syn­tax и, если проверка синтаксиса пройдет успешно, подтвердить изменения.

Чтобы модифицировать хранимую процедуру только средствами Transact-SQL, используется команда ALTER PROCEDURE. Параметры этой команды полностью идентичны аналогичным параметрам команды CREATE PROCEDURE. По сути дела, мы просто переопределяем хранимую процедуру. Это равносильно тому, как если бы мы уничтожили хранимую процедуру, а затем создали ее заново. Но, в отличие от подобного подхода, изменение хранимой процедуры посредством команды ALTER PROCEDURE заключается в том, что при этом сохраняются все предоставленные ранее разрешения на использование этой процедуры.

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

Можно удалить хранимую процедуру непосредственно в Enterprise Manager либо воспользоваться следующей командой Transact-SQL:

DROP PROCEDURE {procedure} [,...n]

Процедура будет немедленно удалена. Это означает, что будут удалены запись о ее имени из таблицы sysobjects и текст кода процедуры из таблицы syscomments.

 

37. Использование индексов. Планирование использования индексов. Типы индексов: кластерные, некластерные и уникальные индексы.

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

Индекс представляет собой дополнение к таблице, помогающее ускорить по­иск необходимых данных за счет физического или логического их упорядочивания. Индекс является набором ссылок, упорядоченным по определенной колонке таблицы, которая называется индексируемой колонкой. Физически индекс представляет собой всего лишь упорядоченный набор значений из индексированной колонки с указателями на места физического размещения исходных строк в структуре базы данных. В индексе хранится не информация обо всей строке данных, а лишь ссылка на нее. Когда пользователь выполняет запрос, обращающийся к индексированной колонке, сервер автоматически использует индекс для поиска требуемых значений. Использование индексов позволяет избежать полного сканирования таблицы. В SQL Server 7.0 реализованы эффективные алгоритмы поиска нужного значения в упорядоченной последовательности данных. Ускорение поиска достигается именно за счет того, что данные представляются упорядоченными. Физически, в зависимости от типа используемого индекса, данные могут быть не упорядочены, а храниться в порядке их добавления в таблицу.

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

 

Планирование и использование индексов

Когда выполняется изменение строк таблицы, то помимо обновления самих данных необходимо выполнить обновление всех индексов. Обновление индексов требует практически столько же времени, сколько и обновление данных. При создании индексов следует ограничиться 4 или 5 индексами.

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

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

Наиболее эффективной структурой для поиска данных в машинном представлении являются В-деревья (B-tree). В SQL Server 7.0 реализовано несколько типов индексов.

Кластерный индекс

Принципиальным отличием кластерного индекса (Clustered Index) от индексов других типов является то, что при его определении в таблице физическое распо­ложение данных перестраивается в соответствии со структурой индекса. Информация об индексе и сами данные физически располагаются вместе

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

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

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

Некластерный индекс

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

Для идентификации нужной строки в таблице некластерный индекс организует специальные указатели (row locator). Эти указатели содержат информацию об идентификационном номере фата (ID file), в котором хранится строка, а также об идентификационном номере страницы и номере искомой строки на этой странице. Если же в таблице определен кластерный индекс, то указатель ссылается не на физическое положение строки в базе данных, а на соответствующий элемент кластерного индекса, описывающего эту строку. Это позволяет не перестраивать структуру некластерных индексов всякий раз, когда кластерный индекс меняет физический порядок строк в таблице. Изменяется только кластерный индекс, а некластерные индексы обновляют только индексируемое значение, но не указатель.

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

В одной таблице можно определить до 249 некластерных индексов. Однако в большинстве случаев следует ограничиться 4-5 индексами.

Уникальный индекс

Уникальные индексы (Unique Indexes) гарантируют уникальность значений в индексируемой колонке. Сервер не разрешит вставить новое или изменить существующее значение таким образом, что в результате этой операции в колонке будет существовать два одинаковых значения.

Уникальный индекс является своеобразной надстройкой и может быть реализован как для кластерного, так и для некластерного индексов. В одной таблице могут существовать один уникальный кластерный индекс и множество уникальных некластерных индексов.

Используйте кластерные индексы тогда, когда это действительно необходимо. Для обеспечения целостности данных в колонке можно определить ограничение целостности UNIQUE или PRIMARY KEY, а не прибегать к использованию уникальных индексов. Использование уникальных индексов только для обеспечения целостности данных является неоправданной тратой пространства в базе данных.

38. Создание и удаление индексов средствами T-SQL.

Формат команды CREATE INDEX следующий:

CREATE [UNIQUE] [CLUSTERED | NONCLUSTERED]

INDEX index_name ON table (column [,...n])

[UNIQUE]. При указании этого ключевого слова будет создан уникальный индекс. При создании такого индекса сервер выполняет предварительную проверку колонки на уникальность значений. Если в колонке есть хотя бы два одинаковых значения, индекс не создается и сервер выдает сообщение об ошибке. В индексируемой колонке также желательно запретить хранение значений NULL, чтобы избежать проблем, связанных с уникальностью значений. После того как для колонки создан уникальный индекс, сервер не разрешает выполнение команд INSERT и UPDATE, которые приведут к появлению дублирующихся значений.

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

NONCLUSTERED. Создаваемый индекс будет некластерным. В таблице можно определить до 249 некластерных индексов.

Index_name. Имя индекса, по которому он будет распознаваться командами Transact-SQL. Имя индекса должно быть уникальным в пределах таблицы.

table (column [,...n]). Имя таблицы, в которой содержатся одна или несколько индексируемых колонок. В скобках указываются имена колонок, на основе которых будет построен индекс. Не допускается построение ин­декса на основе колонок с типом данных text, ntext, image или bit. Если указывается несколько колонок, то создаваемый индекс будет смешанным (composite index). В один смешанный индекс можно включить до 16 колонок.

Для удаления индекса используется команда DROP INDEX, имеющая следующий синтаксис:

DROP INDEX 'table.index' [,...n]

Аргумент 'table.index' определяет индекс в таблице. В одной команде DROP INDEX можно удалить несколько индексов в любой таблице базы данных. Для этого достаточно перечислить их через запятую.

 







Дата добавления: 2015-04-19; просмотров: 1203. Нарушение авторских прав; Мы поможем в написании вашей работы!



Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Растягивание костей и хрящей. Данные способы применимы в случае закрытых зон роста. Врачи-хирурги выяснили...

ФАКТОРЫ, ВЛИЯЮЩИЕ НА ИЗНОС ДЕТАЛЕЙ, И МЕТОДЫ СНИЖЕНИИ СКОРОСТИ ИЗНАШИВАНИЯ Кроме названных причин разрушений и износов, знание которых можно использовать в системе технического обслуживания и ремонта машин для повышения их долговечности, немаловажное значение имеют знания о причинах разрушения деталей в результате старения...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

ТЕРМОДИНАМИКА БИОЛОГИЧЕСКИХ СИСТЕМ. 1. Особенности термодинамического метода изучения биологических систем. Основные понятия термодинамики. Термодинамикой называется раздел физики...

Травматическая окклюзия и ее клинические признаки При пародонтите и парадонтозе резистентность тканей пародонта падает...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.009 сек.) русская версия | украинская версия