ЗНАЕТЕ ЛИ ВЫ?

Что такое кластеризация таблиц? Почему для таблицы может быть создан только один кластерный индекс?



Любой индекс может быть кластерным (CLUSTERED). Это означает, что на его основе можно выполнить кластеризацию таблицы, т.е. переупорядочивание физических страниц данных в соответствии с логическим порядком данного индекса (что естественно увеличивает число дисковых операций ввода-вывода). Поэтому для каждой таблицы может быть создан только один кластерный индекс, тогда как не кластерных индексов может быть несколько (практически оптимальным количеством является 2-6 не кластерных индексов на таблицу). Кластеризация дает преимущество в том случае, если большую часть данных, которые выбираются из таблицы, составляют группы индексированных данных, а не случайно выбранные отдельные данные, т.к. такие группы располагаются на одной и той же физической странице (или последовательных страницах). Но необходимо учитывать, что При выполнении кластеризации таблицы все операции, в том числе чтение, с этой таблицей блокируются.

Для кластеризации в PostgreSQL используется инструкция

CLUSTER [VERBOSE] [ таблица [ USING индекс ] ]

где VERBOSE позволяет вывести сообщение о кластеризации каждой таблицы.

Упорядоченность данных, возникшая в результате кластеризации, не распространяется на данные, которые изменяются после проведения кластеризации, поэтому при обновлении данных кластеризацию необходимо повторить. Для этого достаточно ввести CLUSTER таблица. Если ввести CLUSTER без параметров, рекластеризации будут подвергнуты все таблицы базы даннях, для которых ранее были созданы кластерные индексы, поэтому такие индексы создаются обычно для тех таблиц, данные в которых изменяются редко.

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

Чтобы удалить индекс, надо знать его имя или его OID. Для удаления индекса по имени используется инструкция:

DROP INDEX имя_индекса

Индекс можно удалить непосредственно из системной таблицы pg_index, зная его OID. Удаление индекса не влияет на содержание полей.

Примеры:

CREATE UNIQUE INDEX “_ui_” ON "Доставка" ("Заказ", "Курьер", “Дата_время”);

CLUSTER VERBOSE "Доставка заказов" USING “_ui_”;

 

Что будет введено в столбец, если в инструкции INSERT этот столбец не указан?

Если не указан столбец, то будет внесено значение по умолчанию (DEFAULT). Если в свойствах столбца DEFAULT отсутствует, то будет внесено значение NULL. Если же стоит ограничение NOT NULL, то PostgreSQL выдаст ошибку с сообщением о том, что этот столбец не может принимать значения NULL.

 

 

Как в SQL решаются аномалии удаления и обновления значений родительских ключей?

Можно в свойствах внешних ключей выбрать:

NO ACTION – ничего не делать,

RESTRICT – нельзя удалять,

CASCADE – удалить или изменить запись в дочерней таблице

SET NULL – установить значение NULL в дочерней таблице

SET DEFAULT – установить значение по умолчанию (DEFAULT) в дочерней таблице.

 

Что такое представление?

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

Представление создается с помощью инструкции CREATE VIEW, синтаксис которой имеет следующий вид:

CREATE [OR REPLACE] [TEMP | TEMPORARY] VIEW имя_представления

[ (столбец [, ...] ) ] AS запрос

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

При использовании CREATE OR REPLACE, если представление с таким же именем уже существует в данной схеме, оно будет переопределено.

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

Синтаксис инструкции удаления представления подобен синтаксису удаления базовых таблиц:

DROP VIEW имя_представления

 

8. В чем заключается преимущество использования в запросах представлений по сравнению с базовыми таблицами БД?

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

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

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

 





Последнее изменение этой страницы: 2017-01-25; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.216.79.60 (0.005 с.)