|
Программирование >> Sql: полное руководство
определения всех связанных столбцов. Это дополнительная мера защиты от случай-лого удаления столбцов (и, что более важно, содержащихся в них данных). Псевдонимы таблиц (инструкции CREATE/DROP ALIAS Промышленные базы данных часто бывают организованы подобно базе данных, изображенной на рис. 13.5, где все основные таблицы собраны вместе и принадлежат администратору. Администратор базы данных дает другим пользователям разрешения на доступ к таблицам, руководствуясь правилами обеспечения безопасности, описанными в главе 15. Вспомните, однако, что для ссылки на таблицы других пользователей необходимо использовать полные имена таблиц На практике это означает, что в каждом запросе к главным таблицам на рис 13.5 следует указывать полные имена таблиц, в результате чего запросы становятся длинными, а их ввод - утомительным: Для каждого служащего вывести имя, объем продаж, идентификатор офиса и объем продаж офиса. SELECT NAME, OP ADMIN . SALESREPS . SALES , OFFICE, OP ADMIN . OFFICES . SALES FROM OP ADMIN.SALESREPS, OP ADMIN.OFFICES Для решения этой проблемы во многих СУБД вводится понятие псевдонима или синонима. Псевдоним - это назначаемое пользователем имя, которое заменяет имя некоторой таблицы. В DB2 псевдоним создается с помощью инструкции create alias. (В более ранних версиях DB2 существовала инструкция create synonym, а в Oracle она используется до сих пор, хотя ее действие аналогично действию инструкции create alias.) Если бы вы были, например, пользователем по имени Джордж, то могли бы создать пару таких псевдонимов: Создать псевдонимы для двух таблиц, принадлежащих другому пользователю. CREATE ALIAS REPS FOR OP ADMIN.SALESREPS CREATE ALIAS OFFICES FOR OP ADMIN. OFFICES После создания псевдонима его можно использовать в запросах SQL как обычное имя таблицы. Тогда предыдущий запрос принимает следующий вид: SELECT NAME, REPS.SALES, OFFICE, OFFICES.SALES FROM REPS, OFFICES В результате применения псевдонимов смысл запроса не изменяется, и вам по-прежнему необходимо иметь разрешение на доступ к таблицам других пользователей. Тем не менее, псевдонимы упрощают инструкции SQL, и последние приобретают такой вид, как если бы вы обращались к своим собственным таблицам. Если позднее вы решите, что больше не нуждаетесь в псевдонимах, то можете их удалить посредством инструкции drop alias- Удалить ранее созданные псевдонимы. DROP ALIAS REPS DROP ALIAS OFFICES Псевдонимы используются в DB2, Oracle и Informix. В стандарте ANSI/ISO они отсутствуют. База данных Таблицы Джорджа Таблицы Сэма Таблицы администратора PRODUCTS
ORDERS SALESREPS CUSTOMERS Рис. 13.5. Типичная структура промь1Шп&нной*6аз& данных Индексы (инструкции CREATE/DROP INDEX Одним из структурных элементов физической памяти, присутствующим в боль-щинстве реляционных СУБД, является индекс. Индекс - это средство, обеспечивающее быстрый доступ к строкам таблицы на основе значений одного или нескольких столбцов. На рис. 13.6 изображена таблица products и два созданных для нее индекса. Один из индексов обеспечивает доступ к таблице на основе столбца description. Другой обеспечивает доступ на основе первичного ключа таблицы, представляющего собой комбинацию столбцов mfr id и product id. СУБД пользуется индексом так же, как вы пользуетесь предметным указателем книги. В индексе хранятся значения данных и указатели на строки, где эти данные встречаются. Данные в индексе располагаются в убывающем или возрастающем порядке, чтобы СУБД могла быстро найти требуемое значение. Затем по указателю СУБД может быстро локализовать строку, содержащую искомое значение. Наличие или отсутствие индекса соверщенно незаметно для пользователя, обращающегося к таблице. Рассмотрим, например, такую инструкцию select: Найти количество и цену изделия Size 4 Widgef. SELECT QTY ON HAND, PRICE FROM PRODUCTS WHERE DESCRIPTION = Size 4 Widget Таблица PRODUCTS INDEX ACI 41003 ACI 41004 IMM 7790 MFR IDPRODUCT ID j DESCRIPTION ACI ACI 779C 41003 41004 INDEX 900-lb Brace Size 3 Widget i Size 4 Widget i 900-lb Brace Size 3 Widget Size 4 Widget PRICE QTY ON HAND $1,B75 00 $107 00 $117 00 207 139 Рис W.6. Два индекса rat г PRQWCTS В инструкции ничего не говорится о том, имеется ли индекс для столбца description или нет, и СУБД выполнит запрос в любом случае. Если бы индекса для столбца description не существовало, то СУБД была бы вынуждена выполнять запрос путем последовательного сканирования таблицы products, строка за строкой, просматривая в каждой строке столбец description. Для получения гарантии того, что она нащда все строки, удовлетворяющие условию отбора, СУБД должна просмотреть каждую строку таблицы. Если таблица имеет тысячи или миллионы строк, то ее просмотр может занять минуты и даже часы. Если для столбца description имеется индекс, СУБД находит требуемые данные с гораздо меньшими усилиями. Она просматривает индекс, чтобы найти требуемое значение (изделие Size 4 Widget ), а затем с помощью указателя находит требуемую строку (строки) таблицы Поиск в индексе осуществляется достаточно быстро, так как индекс отсортирован и его строки очень короткие. Переход от индекса к строке (строкам) также происходит довольно быстро, поскольку в индексе содержится информация о том, где на диске располагается эта строка (строки). Как видно из этого примера, индекс имеет то преимущество, что он в огромной степени ускоряет выполнение инструкций SQL с условиями отбора, имеющими ссылки на индексный столбец (столбцы). К недостаткам индекса относится то, что, во-первых, он занимает на диске дополнительное место и, во-вторых, индекс >ieo6-ходимо обновлять каждый раз, когда в таблицу добавляется строка или обновляется индексный столбец таблицы. Это требует дополнительных затрат на выполнение инструкций insert и update, которые Обращаются к данной таблице. В общем-то, полезно создавать индекс лишь для тех столбцов, которые часто используются в условиях отбора. Индексы удобны также в тех случаях, когда инструкции select обращаются к таблице гораздо чаще, чем инструкции insert и update. СУБД всегда создает индекс для первичного ключа таблицы, так как ожидает, что доступ к таблице чаще всего будет осуществляться через первичный ключ В учебной базе данных оь1ло бы уместно создать дополнительные игщексы на основе следующих столбцов; company таблицы customers, если данные из таблицы часто извлекаются по названию компании. name таблицы salesreps, если данные о служащих часто извлекаются по имени служащего.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |