Учебное пособие Санкт-Петербург «бхв-петербург»


( '26' ), ( '27' ), ( '28' ), ( '29' ), ( '30' )



Pdf көрінісі
бет188/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   184   185   186   187   188   189   190   191   ...   256
sql osnovi yazika

( '26' ), ( '27' ), ( '28' ), ( '29' ), ( '30' )
) AS seat_rows ( seat_row )
CROSS JOIN
-- список номеров (позиций) кресел в ряду
( VALUES ( 'A' ), ( 'B' ), ( 'C' ), ( 'D' ), ( 'E' ),
( 'F' ), ( 'G' ), ( 'H' ), ( 'I' )
) AS letters ( letter )
WHERE
CASE WHEN fare_condition = 'Business'
THEN seat_row::integer <= max_seat_row_business
WHEN fare_condition = 'Economy'
THEN seat_row::integer > max_seat_row_business
AND seat_row::integer <= max_seat_row_economy
END
AND letter <= max_letter;
238


Контрольные вопросы и задания
Задание.
Модифицируйте команду с учетом того, что в салоне бизнес-класса
число мест в ряду должно быть меньше, чем в салоне экономического класса
(в приведенном решении мы для упрощения задачи принимали эти числа оди-
наковыми).
Попробуйте упростить подзапрос, отвечающий за формирование списка номе-
ров рядов кресел:
( VALUES ( '1' ), ( '2' ), ( '3' ), ( '4' ), ( '5' ), ...
Воспользуйтесь функцией generate_series, описанной в разделе документации
9.24 «Функции, возвращающие множества».
239



Глава 8
Индексы
Индексы позволяют повысить производительность базы данных. PostgreSQL поддерживает различ-
ные типы индексов. Мы ограничимся рассмотрением только индексов на основе B-дерева. Индекс —
специальная структура данных, которая связана с таблицей и создается на основе данных, содержа-
щихся в ней. Основная цель создания индексов — повышение производительности функционирова-
ния базы данных.
8.1. Общая информация
Строки в таблицах хранятся в неупорядоченном виде. При выполнении операций
выборки, обновления и удаления СУБД должна отыскать нужные строки. Для уско-
рения этого поиска и создается индекс. В принципе он организован таким образом:
на основе данных, содержащихся в конкретной строке таблицы, формируется зна-
чение элемента (записи) индекса, соответствующего этой строке. Для поддержания
соответствия между элементом индекса и строкой таблицы в каждый элемент поме-
щается указатель на строку. Индекс является упорядоченной структурой. Элементы
(записи) в нем хранятся в отсортированном виде, что значительно ускоряет поиск
данных в индексе. После отыскания в нем требуемой записи СУБД переходит к соот-
ветствующей строке таблицы по прямой ссылке. Записи индекса могут формировать-
ся на основе значений одного или нескольких полей соответствующих строк таблицы.
Значения этих полей могут комбинироваться и преобразовываться различными спо-
собами. Все это определяет разработчик базы данных при создании индекса.
При выполнении поиска конкретных строк в таблице специальная подсистема СУБД,
называемая планировщиком, проверяет, имеется ли для этой таблицы индекс, со-
зданный на основе тех же столбцов, что указаны, например, в условии предложения
WHERE. Если такой индекс существует, то планировщик оценивает целесообразность
его использования в данном конкретном случае. Если его использование целесооб-
разно, то сначала выполняется поиск необходимых значений в индексе, а затем, если
такие значения в нем найдены, производится обращение к таблице с использовани-
ем указателей, которые хранятся в записях индекса. Таким образом, полный перебор
241


Глава 8. Индексы
строк в таблице может быть заменен поиском в упорядоченном индексе и переходом
к строке таблицы по прямому указателю (ссылке).
Следует учитывать, что индексы требуют и некоторых накладных расходов на их со-
здание и поддержание в актуальном состоянии при выполнении обновлений данных
в таблицах. Поэтому использовать индексы нужно осмотрительно.
Когда вы создавали таблицы, то видели, что, как правило, для них предусматрива-
лось создание первичного ключа — PRIMARY KEY. В таких случаях СУБД сама создает
индекс, который позволяет поддерживать реализацию этого ограничения. Ведь при
наличии первичного ключа не допускается появление в таблице строк с одинаковы-
ми его значениями. Индекс позволяет выполнять проверку на дублирование очень
быстро.
Для некоторых таблиц, например «Посадочные талоны» (boarding_passes), было
предусмотрено и ограничение уникальности UNIQUE. В этих случаях СУБД также ав-
томатически создает индекс, который используется для обеспечения уникальности
значений.
Для того чтобы увидеть индексы, созданные для данной таблицы, нужно воспользо-
ваться командой утилиты psql:


Достарыңызбен бөлісу:
1   ...   184   185   186   187   188   189   190   191   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет