![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 13.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
Hej,
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:
później w widoku mam foreach, komentarze wyciągam w taki sposób:
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 ...) ?
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! |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Pierwsze rozwiązanie to poroniony pomysł.... najgorsze co możesz zrobic to pierwsze rozwiązanie.
Drugie jest ok. Możesz też pobierać jednym zapytaniem i produkty i komentarze. Ale to komplikuje sprawę przy stronicowaniu. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 13.07.2010 Ostrzeżenie: (0%) ![]() ![]() |
dzięki za odpowiedź. Tego też się spodziewam
![]() czy możemy jakoś mniej więcej wyjaśnić z czego to wynika? np. wywołanie pojedynczego zapytania do bazy kosztuje jakieś setne ułamki sekund i ten czas zyskujemy poprzez skupienie zapytań w jedno? osobiście zawsze optymalizuję aplikację tam gdzie to możliwe na każdej płaszczyźnie (z DB na czele - np lazy load na Rowsecie z rozwiązaniem z tym w stylu przykładu nr 2 wyżej), jednak ostatnio przejąłem projekt, gdzie rozwiązań optymalizacyjnych, o zgrozo, jest nie więcej niż 0. Aplikacja będzie operować na bardzo dużym rozmiarze danych, stąd moje obawy. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat czy możemy jakoś mniej więcej wyjaśnić z czego to wynika? np. wywołanie pojedynczego zapytania do bazy kosztuje jakieś setne ułamki sekund i ten czas zyskujemy poprzez skupienie zapytań w jedno? Wykonaj sobie 5tys zapytań na raz w aplikacji php i sam zrozumiesz ![]() Nawet jeśli przejdzie to przez stronicowanie i będzie to powiedzmy 30 zapytań, to nadal jest to niesamowity zbędny koszmar. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 04:17 |