Индексы
249
id: 1
select_type: SIMPLE
table: account
type: index
possible_keys: fk_a_cust_id
key: fk_a_cust_id
key_len: 4
ref: NULL
rows: 24
Extra: Using where
1 row in set (0.00 sec)
Каждый
сервер БД включает инструменты, позволяющие уви
деть, как оптимизатор запросов обрабатывает SQLвыражение.
В SQL Server увидеть план выполнения перед выполнением
SQLвыражения позволяет выражение
set
showplan_text
on
.
В Oracle
Database есть выражение
explain
plan
, записывающее
план выполнения в специальную таблицу
plan_table
.
Если не вдаваться в детали, то план выполнения сообщает следующее:
•
Индекс
fk_a_cust_id
используется
для поиска строк таблицы
account
,
которые удовлетворяют условию блока
where
.
•
После прочтения индекса ожидается, что сервер просмотрит все
24 строки таблицы
account
для сбора данных о доступных остатках,
поскольку он не знает, что могут существовать другие клиенты,
кроме клиентов с ID 1, 5, 9 и 11.
Индекс
fk_a_cust_id
–
еще один индекс, автоматически сгенерирован
ный сервером, но на этот раз изза ограничения внешнего ключа, а не
ограничения первичного ключа (более подробно об
этом позже в этой
главе). Индекс
fk_a_cust_id
создан для столбца
account.cust_id
, таким
образом, сервер использует его для определения местоположения кли
ентов с ID 1, 5, 9 и 11 в
таблице
account
, а затем посещает эти строки
для извлечения и агрегирования данных по доступным остаткам.
Далее добавим новый индекс с названием
acc_bal_idx
для обоих столб
цов
cust_id
и
avail_balance
:
mysql>
Достарыңызбен бөлісу: