= Преглед: 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 дефиниција == {{{ #!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; }}} == Тестирање на перформанси == Примерите користат илустративни идентификатори и датуми. За споредливи мерења се избираат вредности што постојат во базата и се задржуваат истите податоци, филтри, услови за кеширање и број на повторувања. Статистиките за табелите треба да бидат ажурирани во двете состојби. === Тест прашалници === {{{ #!sql 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 наредба за овој преглед. Двете мерења го користат истото основно покривање со индекси. === Проверка на индексите === {{{ #!sql 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 × (време пред − време по) / време пред, кога почетното време е поголемо од нула. Негативна вредност означува побавно извршување. Изборот меѓу секвенцијално читање, индексно читање и други планови зависи од обемот на податоците, селективноста на филтрите и статистиките. Индексите не гарантираат забрзување или отстранување на сортирањата и спојувањата. Плановите и времињата се утврдуваат со мерење. Разлика во времињата кај непроменет сет индекси не е доказ за подобрување од нов индекс.