mam prośbę o analizę i opinię nt. rozwiązania, którego założeniem jest poprawienie szybkości pracy aplikacji przez ograniczenie wykonywanych zapytań do bazy danych.
Załóżmy taka sytuację - mamy listing produktów, przy każdym z produktów trzeba wyświetlić komentarze do produktu.
Produkty wyciągam np tak:
$products = $tabela->fetchAll();
później w widoku mam foreach, komentarze wyciągam w taki sposób:
foreach($products as $product) { $komentarze = $products->getComments(); }
wywołanie metody getComments() powoduje wysłanie zapytania do bazy o komentarze do konkretnego produktu. w praktyce to wygląda tak, że dla 5000 produktów 5000 razy wykona się zapytanie do bazy. Oczywiście - wiem, że jest stronicowanie, ale chodzi mi o analizę sytuacji, dlatego w tym przykładzie z tego nie skorzystam

i teraz moje pytanie - czy nie lepiej byłoby przygotować sobie wcześniej w PHP te dane?
zabrać identyfikatory produktów w tablicę i wyciagnąć jednym zapytaniem korzystajac z IN(id1, id2, id3 ...) ?
foreach($products as $product) { $ids[] = $product->getId(); } $commentsByProductId = $tabela->findByProductIds($ids); // załóżmy, że komentarze są posortowane wg product_id foreach($commentsByProductId as $productId => $comments) { foreach($comments as $comment) { $products[$productId]->addComment($comment); } } }
w efekcie mamy dwa zapytania - jedno o produkty, drugie o komentarze z klauzulą WHERE z IN z identyfikatorami 5000 produktów.
Czy to nam znacznie odciąża bazę danych? Czy warto stosować tego typu rozwiązania przy optymalizacji?
z góry dzięki za wszystkie opinie!