Программирование >>  Sql: полное руководство 

1 ... 103 104 105 [ 106 ] 107 108 109 ... 264


определения всех связанных столбцов. Это дополнительная мера защиты от случай-лого удаления столбцов (и, что более важно, содержащихся в них данных).

Псевдонимы таблиц (инструкции 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

OFFICES

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, если данные о служащих часто извлекаются по имени служащего.



1 ... 103 104 105 [ 106 ] 107 108 109 ... 264

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика