| Version 3 (modified by , 2 weeks ago) ( diff ) |
|---|
Преглед: v_menu_drink
| Својство | Вредност |
|---|---|
| Шема | kbnteam
|
| Категорија | Мени и каталог |
| Поврзани индекси | Примарни и уникатни клучеви |
Опис
Ги прикажува пијалоците, нивната количина и цена, како и ресторанот.
Едноставно спојување на drink и restaurant, без агрегации.
Еден ред за секој пијалак. Менито не се ограничува според активноста на договорите.
Зависности
| Табела / преглед | Употреба |
|---|---|
kbnteam.drink | Пијалоци, количини, цени и ресторан. |
kbnteam.restaurant | Податоци за рестораните. |
Излезни колони
| Колона | Извор / пресметка | Опис |
|---|---|---|
drink_id | drink.drink_id | Идентификатор на пијалакот. |
drink_name | drink.drink_name | Назив на пијалакот. |
drink_milliliters | drink.drink_milliliters | Количина во милилитри. |
drink_price | drink.drink_price | Цена на пијалакот. |
rest_id | restaurant.rest_id | Идентификатор на ресторанот. |
rest_name | restaurant.rest_name | Назив на ресторанот. |
SQL дефиниција
CREATE OR REPLACE VIEW kbnteam.v_menu_drink AS
SELECT
d.drink_id,
d.drink_name,
d.drink_milliliters,
d.drink_price,
r.rest_id,
r.rest_name
FROM kbnteam.drink d
JOIN kbnteam.restaurant r ON r.rest_id = d.rest_id;
Тестирање на перформанси
Примерите користат илустративни идентификатори и датуми. За споредливи мерења се избираат вредности што постојат во базата и се задржуваат истите податоци, филтри, услови за кеширање и број на повторувања. Статистиките за табелите треба да бидат ажурирани во двете состојби.
Тест прашалници
BEGIN READ ONLY; SET LOCAL statement_timeout = '60s'; -- Тест 1: целосен преглед EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT * FROM kbnteam.v_menu_drink; -- Тест 2: по ресторан EXPLAIN (ANALYZE, BUFFERS, VERBOSE) SELECT * FROM kbnteam.v_menu_drink WHERE rest_id = 1; ROLLBACK;
Резултати пред индексирање
Основната состојба ги задржува индексите на примарните клучеви и уникатните ограничувања. Останатите присутни индекси се евидентираат одделно. При споредба на заеднички индекси се користи истата почетна состојба за секој преглед.
| Метрика | Тест 1 (целосен преглед) | Тест 2 (по ресторан) |
|---|---|---|
| Planning Time | _ ms | _ ms |
| Execution Time | _ ms | _ ms |
| Rows Returned | _ | _ |
| Начин на читање по табела | _ | _ |
| Shared Hit Blocks | _ | _ |
| Shared Read Blocks | _ | _ |
-- Планови и резултати пред дополнителното индексирање:
Дополнителни и заеднички индекси
drink(rest_id, drink_name) е покриен со уникатното ограничување uq_drink_restaurant_name, а restaurant(rest_id) со примарен клуч. За овој преглед нема дополнителен индекс.
Нема дополнителна CREATE INDEX наредба за овој преглед. Двете мерења го користат истото основно покривање со индекси.
Проверка на индексите
SELECT tablename, indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'kbnteam'
AND tablename IN ('drink', 'restaurant')
ORDER BY tablename, indexname;
Резултати по индексирање
Мерењето ги користи истите тест прашалници и услови како почетното мерење.
| Метрика | Тест 1 (целосен преглед) | Тест 2 (по ресторан) |
|---|---|---|
| Planning Time | _ ms | _ ms |
| Execution Time | _ ms | _ ms |
| Rows Returned | _ | _ |
| Начин на читање по табела | _ | _ |
| Shared Hit Blocks | _ | _ |
| Shared Read Blocks | _ | _ |
-- Планови и резултати по дополнителното индексирање:
Анализа на подобрување
| Метрика | Пред | По | Промена (%) |
|---|---|---|---|
| Execution Time (Тест 1) | _ ms | _ ms | _ % |
| Execution Time (Тест 2) | _ ms | _ ms | _ % |
Промената се пресметува како 100 × (време пред − време по) / време пред, кога почетното време е поголемо од нула. Негативна вредност означува побавно извршување.
Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење.
Разлика во времињата кај непроменет сет индекси не е доказ за подобрување од нов индекс.
