Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 30 Pomógł: 0 Dołączył: 12.01.2008 Skąd: Warszawa Ostrzeżenie: (0%)
|
Witam,
Natknąłem się na problem poniekąd natury filozoficznej. Muszę zrealizować dość skomplikowaną operację na danych z bazy i widzę dwie możliwości rozwiązania zadania: Rozwiązanie 1. Pobrać wszystkie dane na raz, jednym zapytaniem i potem "obrobić" je w kodzie. Dokładnie chodzi o zsumowanie wartości produktów według grup do których należą, czyli pobieram wszystkie produkty jednym zapytaniem, następnie iteruję po nich i sumuję wartości przypisując je do tablicy z grupami produktów. Rozwiązanie 2. Stworzyć dwa oddzielne widoki w bazie danych (tak mi wychodzi ze struktury bazy, każdy z nich będzie miał ok. dwa JOIN'y) a następnie w kodzie przy zapytaniu połączyć kolejnym JOIN'em te dwa widoki. To rozwiązanie nie wymaga iterowania po tablicy w kodzie, ani wykonywania żadnych innych "brzydkich" operacji na danych. To rozwiązanie podoba mi się bardziej ze względu na czystość w kodzie i łatwość utrzymania kodu, ale mam małe obawy co do wydajności tego podejścia. Czy istnieją jakieś "best practices" w takich przypadkach? Lepiej dane "obrabiać" po stronie bazy danych, czy w kodzie? |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 1 890 Pomógł: 339 Dołączył: 14.12.2006 Skąd: Warszawa Ostrzeżenie: (0%)
|
Twoje pierwsze rozwiązanie:
A) jest "brzydkie" B) wywali się przy większej ilości rekordów z powodu PHP'owego memory_limit Co do drugiego rozwiązania to widoki w MySQL są złem, chociażby ze względu na przenośność (są problemy z uprawnieniami i użytkownikami). Poza tym jeśli możesz to zrobić za pomocą widoku, to możesz też zwykłym zapytaniem. Efekt jest ten sam - i tak MySQL musi przemielić wszystkie dane. Więc ja bym chyba był za 3. opcją - jedno bardziej rozbudowane zapytanie. Ten post edytował sowiq 28.08.2014, 15:55:02 |
|
|
|
awakening Co jest bardziej wydajnym i "lepszym" rozwiązaniem 28.08.2014, 15:47:57
awakening Na razie używam widoków ze względów praktycznych. ... 28.08.2014, 16:05:24 
Pyton_000 Cytat(awakening @ 28.08.2014, 17:05:2... 28.08.2014, 21:36:52 
awakening Cytat(Pyton_000 @ 28.08.2014, 22:36:5... 28.08.2014, 22:14:43 
sowiq Cytat(awakening @ 28.08.2014, 23:14:4... 29.08.2014, 09:18:14
Pyton_000 Raczej o:
[SQL] pobierz, plaintext SELECT col1, c... 29.08.2014, 09:32:34 ![]() ![]() |
|
Aktualny czas: 24.12.2025 - 10:40 |