= Преглед: v_driver_deliveries = ||= Својство ||= Вредност || || Шема || `kbnteam` || || Категорија || Нарачки и достави || || Поврзани индекси || [wiki:DriverDeliveriesIndex Индекси за нарачки и достави] || == Опис == Ги прикажува доставите, доставувачите, рестораните, компаниите и поврзаните нарачки. Го користи прегледот на нарачки за деталите за клиентот и нарачаните производи. Се прикажуваат и доставите без назначен доставувач или поврзани нарачки. Еден ред за секоја клиентска нарачка во доставата. Достава без клиентски нарачки останува прикажана со NULL податоци за нарачката. Податоците за нарачките се добиваат преку [wiki:OrdersFullView v_orders_full]. Овој преглед е зависност на прегледот за достави. == Зависности == ||= Табела / преглед ||= Употреба || || `kbnteam.delivery` || Достави, датуми, забелешки и назначени доставувачи. || || `kbnteam.delivery_status` || Називи на статусите на доставите. || || `kbnteam.driver` || Доставувачи и нивните ресторани. || || `kbnteam.api_user` || Лични и контактни податоци за корисниците. || || `kbnteam.restaurant` || Податоци за рестораните. || || `kbnteam.company_order` || Поврзување на компаниските нарачки со компанијата и доставата. || || `kbnteam.company` || Податоци за компаниите. || || [wiki:OrdersFullView v_orders_full] || Преглед со детали за клиентските нарачки и листи со производи. || == Излезни колони == ||= Колона ||= Извор / пресметка ||= Опис || || `delivery_id` || `delivery.delivery_id` || Идентификатор на доставата. || || `delivery_date` || `delivery.delivery_date` || Датум на доставата. || || `delivery_notes` || `delivery.delivery_notes` || Забелешки за доставата. || || `d_status_name` || `delivery_status.d_status_name` || Статус на доставата. || || `driver_user_id` || `driver.user_id` || Идентификатор на доставувачот. || || `driver_first_name` || `api_user.user_first_name` || Име на доставувачот. || || `driver_last_name` || `api_user.user_last_name` || Презиме на доставувачот. || || `driver_phone` || `api_user.user_phone_no` || Телефон на доставувачот. || || `rest_id` || `restaurant.rest_id` || Идентификатор на ресторанот. || || `rest_name` || `restaurant.rest_name` || Назив на ресторанот. || || `comp_order_id` || `company_order.comp_order_id` || Идентификатор на компаниската нарачка. || || `company_id` || `company.company_id` || Идентификатор на компанијата. || || `company_name` || `company.company_name` || Назив на компанијата. || || `order_id` || `v_orders_full.order_id` || Идентификатор на клиентската нарачка. || || `order_datetime` || `v_orders_full.order_datetime` || Датум и време на нарачката. || || `order_total` || `v_orders_full.order_total` || Вкупен износ на нарачката. || || `customer_user_id` || `v_orders_full.customer_user_id` || Идентификатор на клиентот. || || `customer_first_name` || `v_orders_full.customer_first_name` || Име на клиентот. || || `customer_last_name` || `v_orders_full.customer_last_name` || Презиме на клиентот. || || `customer_email` || `v_orders_full.customer_email` || Е-пошта на клиентот. || || `meals` || `COALESCE(v_orders_full.meals, '')` || Подредена листа со називи на нарачаните јадења. || || `drinks` || `COALESCE(v_orders_full.drinks, '')` || Подредена листа со називи на нарачаните пијалоци. || == SQL дефиниција == {{{ #!sql CREATE OR REPLACE VIEW kbnteam.v_driver_deliveries AS SELECT d.delivery_id, d.delivery_date, d.delivery_notes, ds.d_status_name, drv.user_id AS driver_user_id, du.user_first_name AS driver_first_name, du.user_last_name AS driver_last_name, du.user_phone_no AS driver_phone, r.rest_id, r.rest_name, co.comp_order_id, cmp.company_id, cmp.company_name, o.order_id, o.order_datetime, o.order_total, o.customer_user_id, o.customer_first_name, o.customer_last_name, o.customer_email, COALESCE(o.meals, '') AS meals, COALESCE(o.drinks, '') AS drinks FROM kbnteam.delivery d JOIN kbnteam.delivery_status ds ON ds.d_status_id = d.d_status_id LEFT JOIN kbnteam.driver drv ON drv.user_id = d.driver_user_id LEFT JOIN kbnteam.api_user du ON du.user_id = drv.user_id LEFT JOIN kbnteam.restaurant r ON r.rest_id = drv.rest_id LEFT JOIN kbnteam.company_order co ON co.delivery_id = d.delivery_id LEFT JOIN kbnteam.company cmp ON cmp.company_id = co.company_id LEFT JOIN kbnteam.v_orders_full o ON o.comp_order_id = co.comp_order_id; }}} == Индексна поддршка == `company_order(delivery_id)` има уникатен индекс. Прегледот ги користи и индексите за нарачките преку `v_orders_full`. ||= Индекс ||= Табела и колони ||= Намена || || `idx_company_order_company_id` || `company_order(company_id)` || Пронаоѓање компаниски нарачки по компанија. || || `idx_customer_order_comp_order_id` || `customer_order(comp_order_id)` || Пронаоѓање клиентски нарачки по компаниска нарачка. || || `idx_order_meal_order_id_meal_id` || `order_meal(order_id, meal_id)` || Пристап до јадењата на нарачката и групирање по order_id. || || `idx_order_drink_order_id_drink_id` || `order_drink(order_id, drink_id)` || Пристап до пијалоците на нарачката и групирање по order_id. || || `idx_delivery_driver_user_id_delivery_date` || `delivery(driver_user_id, delivery_date)` || Пронаоѓање достави по доставувач; во прегледите за нарачки и достави и по датум. || || `idx_driver_rest_id` || `driver(rest_id)` || Пронаоѓање доставувачи по ресторан. || {{{ #!sql CREATE INDEX IF NOT EXISTS idx_company_order_company_id ON kbnteam.company_order (company_id); CREATE INDEX IF NOT EXISTS idx_customer_order_comp_order_id ON kbnteam.customer_order (comp_order_id); CREATE INDEX IF NOT EXISTS idx_order_meal_order_id_meal_id ON kbnteam.order_meal (order_id, meal_id); CREATE INDEX IF NOT EXISTS idx_order_drink_order_id_drink_id ON kbnteam.order_drink (order_id, drink_id); CREATE INDEX IF NOT EXISTS idx_delivery_driver_user_id_delivery_date ON kbnteam.delivery (driver_user_id, delivery_date); CREATE INDEX IF NOT EXISTS idx_driver_rest_id ON kbnteam.driver (rest_id); }}} === Проверка на индексите === {{{ #!sql SELECT tablename, indexname, indexdef FROM pg_indexes WHERE schemaname = 'kbnteam' AND indexname IN ( 'idx_company_order_company_id', 'idx_customer_order_comp_order_id', 'idx_order_meal_order_id_meal_id', 'idx_order_drink_order_id_drink_id', 'idx_delivery_driver_user_id_delivery_date', 'idx_driver_rest_id' ) ORDER BY tablename, indexname; }}} == Тестирање на перформанси == === SELECT === Мерењата се евидентирани во DBeaver. Времињата се во милисекунди (ms). {{{ #!sql SELECT * FROM kbnteam.v_driver_deliveries WHERE driver_user_id = 450; }}} ||= Мерење ||= Клиентско време (ms) ||= Приказ во DBeaver || || Пред индексирање || околу 70000 || Преземени 200 редови || || По индексирање || 48236 || Вкупно време за 2 наредби || Во статистиката по индексирањето се прикажани следните времиња: ||= Метрика ||= Време (ms) || || Execute || 48208 || || Fetch || 28 || || Вкупно || 48236 || Првото мерење прикажува околу 1 минута и 10 секунди за 200 редови, а второто статистика за две наредби. Споредбата е ориентациска поради различниот начин на мерење. === INSERT и UPDATE === Тестирани се по еден INSERT и еден UPDATE врз `kbnteam.delivery`, главната табела на погледот. Се тестира додавање достава и промена на забелешката. ||= Операција ||= Execute (ms) ||= Fetch (ms) ||= Вратени редови || || INSERT || 13 || 16 || 1 || || UPDATE || 13 || 13 || 1 || Execute е времето на извршување прикажано во DBeaver. Fetch вредностите се преземени од дополнетата евиденција на тестирањето. Ова се клиентски времиња, изразени во милисекунди. Двете операции се успешни и враќаат по еден ред преку RETURNING. По мерењето промените се вратени со ROLLBACK. INSERT и UPDATE се извршуваат со прифатлива брзина. Овие мерења ја опишуваат тестираната состојба на базата и не се споредба пред и по индексирање.