Учебно-практическое пособие москва 2017 ббк


CREATE INDEX bookings_book_date_part_key



Pdf көрінісі
бет189/243
Дата21.07.2022
өлшемі3,05 Mb.
#147663
түріУчебно-практическое пособие
1   ...   185   186   187   188   189   190   191   192   ...   243
Байланысты:
Язык SQL. Базовый курс

CREATE INDEX bookings_book_date_part_key
ON bookings ( book_date )
WHERE total_amount > 1000000;
CREATE INDEX
Повторим вышеприведенный запрос. Теперь он выдаст результат за время, на поря-
док меньшее, чем без использования частичного индекса.
В разделе документации 11.8 «Частичные индексы» сказано, что для того чтобы СУБД
использовала частичный индекс, необходимо чтобы условие, записанное в запросе
в предложении WHERE, соответствовало предикату индекса. Это означает, что либо
условие должно быть точно таким же, как использованное в предикате частичного
индекса при его создании, либо условие запроса должно математически сводиться к
предикату индекса, а система должна суметь это понять. Например, в таком запросе
индекс будет использоваться:
SELECT * FROM bookings WHERE total_amount > 1100000 ...
194


А в таком не будет:
SELECT * FROM bookings WHERE total_amount > 900000 ...
Частичные индексы выглядят очень привлекательно, но в большинстве случаев их
преимущества по сравнению с обычными индексами будут минимальными (см. за-
дание 9). Однако размер частичного индекса будет меньше, чем размер обычного.
Для получения заметного полезного эффекта от их применения необходим опыт и
понимание того, как работают индексы в PostgreSQL.
Контрольные вопросы и задания
1. Предположим, что для какой-то таблицы создан уникальный индекс по двум
столбцам: column1 и column2. В таблице есть строка, у которой значение атри-
бута column1 равно «ABC», а значение атрибута column2 — NULL. Мы решили
добавить в таблицу еще одну строку с такими же значениями ключевых атри-
бутов, т. е. column1 — «ABC», а column2 — NULL.
Как вы думаете, будет ли операция вставки новой строки успешной или завер-
шится с ошибкой? Объясните ваше решение.
2. В тексте главы шла речь о выполнении одной и той же выборки из таблицы «Би-
леты» (tickets) при наличии индекса по столбцу passenger_name и при его отсут-
ствии. Вы видели, что наличие индекса ускоряет выполнение запроса почти на
порядок.
Если секундомер в утилите psql выключен, то включите его с помощью команды
\timing on
Проведите следующий эксперимент: выполните этот запрос несколько раз под-
ряд при отсутствии индекса, а затем создайте индекс и опять выполните этот
запрос несколько раз подряд.


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




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

    Басты бет