![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Developerzy Postów: 823 Pomógł: 12 Dołączył: 18.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Dziś chciałbym podyskutować troszkę na temat optylamizacji zapytań do baz danych. Ostatnio mam problem z pobraniem ilości komentarzy przypisanych do listy notek na blogu, a że będzie to dość wielki system blogowy oferujący dobudowanie swojej cegiełki w Internecie, zależy mi na maksymalnej optymalizacji, dlatego poświece temu ten oto topick. Wracając do zliczania komentarzy. Mamy 3 sposoby: 1. Zapisywać ilość komentarzy (notes_comments = notes_comments + 1) przy każdym dodawaniu komentarza do notki, a przy usuwaniu odejmować tą wartość. 2. Zliczać ilość komentarzy zapytaniem, które przelatuje przez tabelą komentarzy licząc je i grupując wg ich ID, ale tylko te, które przynależą do notek wyświetlonych na liście, przykładowo:
Otrzymujemy tablicę: NOTKA => ILOŚĆ_KOMENTARZY, później możemy połączyć ją w PHP. 3. Dołączmy JOINA i countujemy komentarze przpisane do danej notki:
----------------------------------------------------------------------------------------- Wykonując sposób pierwszy, nie mamy doczynienia z żadnym liczeniem. Chciałbym trochę podyskutować na temat sposobu 2 i 3. Doszły mnie słuchy od @cichy'ego i od @hwao, że przy wielkiej ilości rekordów baza może trochę zamulać. Zadaje więc 2 pytania: Całe sedno sprawy
Zapraszam do dyskusji ![]() ![]() -------------------- Portfolio: Vgroup.pl | athlan.pl | Test.php.pl - sprawdź się z wiedzy o PHP i ułóż własne pytania!
Pomogłem? Kliknij |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
To moze ja sie wypowiem troche w tej kwestii. Podales 3 przyklady wykorzystania, jesli chodzi o optymalne rozwiazanie i ilosc komentarzy do posta to nie wiem jak bys kombinowal to 1 przykad jest najbardziej optymalny - dlaczego? Wyciagasz 1 rekord jako PK z 1 tabeli gdzie masz juz 1 wartosc, opleracje zewnetrznych zlaczen jak i agregacji sa calkowicie pomijane.
Co do przykladu nr 3 warto podkreslic ze na optymalizacje wchodzi kilka czynnikow. 1 to index na pola zlaczeniowe, 2 index na pole uzywane w sortowaniu. Co do stwierdzenia ze przy duzych danych baza bedzie zamulac to pomysl ma szybciej dzialac? Przeciez LEFT JOIN to odczytanie krotek z jednej tabeli a nastepnie w petli dolanczanie do 2 tabeli a nastepnie agregacja sortowania i inne cuda, wiec co szybciej jest wykonac 10x petle czy powiedzmy 10 mil? Wazne w bazie sa indeksy - to tak jak w ksiazce otwierasz spis tresci i wiesz jaki temat Cie interesuje i jaka strone chesz otworzyc bez czytania kazdej strony. Co do Twoich testow to wsumie wykonywales na malej ilosci danych. Jesli chcesz dobrze operowac cache w bazie danych to takie narzedzie jak bind jest Ci pomocne. Mowie tutaj o cache stringa zapytan w bazie. Kiedys o tym juz pisalem, po co sie stosuje prepare i bind. Co do cache juz w samym php to tez ma sens jesli nawet cache mial by sie oswierzac 1 na 10 zadan. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 17:44 |