Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ilość tabel a wydajność
Forum PHP.pl > Forum > Bazy danych > MySQL
delphiak
Witam

Podczas tworzenia bazy danych pewnego serwisu natknalem sie na nastepujacy problem:
Serwis ma mniej wiecej taka strukture:
- ma N kategorii ( n ~ 100-300 )
- wszystkie kategorie maja kilka wspolnych cech (pol) + wiekszosc z nich ma kilka cech indywidualnych (od 0 do 4 cech)
- kazda kategoria ma przypisane jakies produkty (powiedzmy nie wiecej niz 10'000 kazda)

Problem polega na tym, ze na poczatku zaprojektowalem baze ktora miala tabele 'kategorie' ktora laczyla wszystkie wspolne cechy kategorii, a nastepnie dodatkowa tabele 'atrybutu', ktora zawierala dane w stylu: nazwa, rodzaj i do ktorej kategorii nalezy.
Jednak natknalem sie problem odczytu takiej bazy. Nie mozna tego zrobic sensownie jednym zapytaniem. Przy uzyciu joinow, dostaje za kazdym razem jeden atrybut i cala strukture kategorii. Spory narzut. Natiomast pobieranie najpierw wszystkich produktow a potem wczytywanie dla kazdego jego atrybutow osobnym zapytaniem wydaje sie jeszcze bardziej bezsensu.

Pomyslalem, wiec ze bede tworzyl tabele dynamicznie, dla kazdej kategorii osobno. Wtedy odejdzie problem łaczenia tabel oraz wyszukiwanie danych po atrybutach tez bedzie duzo prostsze.

Moje pytanie teraz brzmi: czy baza skladajaca sie z powiedzmy 300 tabel a zawierajaca te same dane co powiedzmy baza z 20 tabelami bedzie wolniej obslugiwana przez MySQL ?
Wydaje mi sie, ze liczba tabel w bazie nie powinna miec znaczenia, ale to tylko moje przeczucie i chcialbym zeby wypowiedzial sie ktos kto wie troche bardziej jak dziala MySQL.
Pozdrawiam
zzeus
Myśle że stowrzenie kiluset tabel i ich późniejsz obsługa będzie o wiele bardziej problematyczna niż napisanie odpowiednich zapytań z klikoma joinami. Zdecydowanie pierwsza opcja.
delphiak
Ok. Zagalopowalem sie. Ten sposob jest kompletnie bezsensu. Tak sie skupilem na wyszukiwani danych ze wzgledu na ich atrybutu szczegolne, ze zapomnialem, ze rozbiajac to na kilka tabel, nie bede mial mozliwosci sensownego wyszukiwania wg ich cech wspolnych. Temat zatem nieaktualny.

Przy okazji doczytalem tez, ze mysql tak jakby posiada caly czas 'otwarte' najczesciej uzywane tabele. Wiec korzystanie z wielu tabel, albo spowolni operacje (bo bedzie trzeba czesto otwierac i zamykac tabele) albo da spory narzut w pamieci, gdyz wiecej tabel bedzie musialo byc caly czas otwartych.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.