Witam,
Mam następujące zapytanie w postgresie:
SELECT
pr.id_product_recv, pr.num_recv, pr.datetime,
p.name AS product_name,
c.name AS category_name,
u.id_user, u.name, u.surname
FROM product_recv pr
INNER JOIN product p ON p.id_product = pr.id_product
INNER JOIN username u ON u.id_user = pr.id_user
INNER JOIN category c ON c.id_category = p.id_category
WHERE
pr.datetime IN (
SELECT MAX(datetime) AS last_date FROM product_recv
);
Jego plan zapytania jest następujący:
"Nested Loop (cost=10300.92..20664.44 rows=1 width=96)"
" -> Nested Loop (cost=10300.78..20664.26 rows=1 width=83)"
" -> Nested Loop (cost=10300.36..20660.20 rows=1 width=52)"
" -> Hash Semi Join (cost=10300.07..20659.88 rows=1 width=40)"
" Hash Cond: (pr.datetime = (max(product_recv.datetime)))"
" -> Seq Scan on product_recv pr (cost=0.00..9104.83 rows=478083 width=40)"
" -> Hash (cost=10300.06..10300.06 rows=1 width=8)"
" -> Aggregate (cost=10300.04..10300.05 rows=1 width=8)"
" -> Seq Scan on product_recv (cost=0.00..9104.83 rows=478083 width=8)"
" -> Index Scan using id_product on product p (cost=0.29..0.31 rows=1 width=28)"
" Index Cond: (id_product = pr.id_product)"
" -> Index Scan using id_user on username u (cost=0.42..4.05 rows=1 width=39)"
" Index Cond: (id_user = pr.id_user)"
" -> Index Scan using id_category on category c (cost=0.14..0.16 rows=1 width=29)"
" Index Cond: (id_category = p.id_category)"
Jestem początkujący w zakresie optymalizacji. Zastanawiam się w jaki sposób mógłbym przyspieszyć to zapytanie? Będę wdzięczny za podpowiedź. Obecny czas wykonania to 140ms.
Czy to zapytanie można sensownie przyspieszyć? Jest to na cel czysto dydaktyczny.
Pozdrawiam,