Изучаем sql


SELECT cust_id, SUM(avail_balance) tot_bal



Pdf көрінісі
бет219/261
Дата28.07.2022
өлшемі1,6 Mb.
#147825
1   ...   215   216   217   218   219   220   221   222   ...   261
Байланысты:
Изучаем SQL ( PDFDrive )

SELECT cust_id, SUM(avail_balance) tot_bal
> FROM account
> WHERE cust_id IN (1, 5, 9, 11)
> GROUP BY cust_id;
+++
| cust_id | tot_bal |
+++
| 1 | 4557.75 |
| 5 | 2237.97 |
| 9 | 10971.22 |
| 11 | 9345.55 |
+++
4 rows in set (0.00 sec)
С помощью выражения 
explain
(объяснить) рассмотрим, как оптими
затор запросов MySQL принимает решение об обработке запроса. Сер
вер не будет выполнять запрос, а покажет план его выполнения:
mysql> 
EXPLAIN SELECT cust_id, SUM(avail_balance) tot_bal
> FROM account
> WHERE cust_id IN (1, 5, 9, 11)
> GROUP BY cust_id \G
*************************** 1. row ***************************


Индексы
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> 


Достарыңызбен бөлісу:
1   ...   215   216   217   218   219   220   221   222   ...   261




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

    Басты бет