Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szybkość zapytania a wielkość tabeli / ilość tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
piachu
Witam.

Mam pytanie do bardziej doświadczonych kolegów/koleżanek.
Mianowicie, czy lepiej przetrzymywać dane w dwóch mniejszych tabelach i później odwoływać się bardziej skomplikowanym zapytaniem sql czy też lepiej jest je mieć w jednej większej tabeli?

Chodzi mi o zależność szybkość wykonania zapytania - wielkość tabeli.
1. Lepiej pobierać dane z dwóch mniejszych tabel.
2. Lepiej pobierać dane z jednej większej.

Dzięki za odpowiedź.
KILIUSZKIN
Takich testów wydajnościowych nigdy nie robiłem, ale intuicja starego bazodanowca aaevil.gif podpowiada mi, że na szybkość zapytania na pewno największy wpływ ma właściwa indeksacja tabeli(tabel).
W tym przypadku lepiej dane przechowywać w jednej dobrze poindeksowanej tabeli z takim wyjątkiem oczywiście, że wielkość tabeli nie przekracza ograniczeń MySQL co do wielkości bazy, bo wtedy trzeba kombinować.
Skobi
Twojego ptoblemu bym nie rozwazal w takich kategoriach, baza danych sluzy do przechowywania danych i do tego w różnych tabelach. Jeżeli dane które mają być w bazie sa w relacji 1:1 to zrób jedna tabelę, ponieważ często 1:1 świadczy o błędnym projekcie bazy danych, natomiast jeżeli 1:n to jakby nie masz wyjścia.
Oczywiście zapytanie, które będzie się łączylo do dwóch tabel zawsze bedzie sie wykonywalo dluzej, niż zapytanie odpytujace baze danych po jednej tabeli. Jeżeli odpowiednio załozysz indeksy to nie masz się co martwić. Do tego poszukaj informacji o funkcji

  1. EXPLAIN


dzięki niemu możesz prześledzić wykonywanie się zapytania i dzięki temu sprawdzenie co będzie szybsze.
piachu
Dziękuję Wam za odpowiedzi.

Myślałem o podzieleniu na tabele następujacych danych. W pierwszej tabeli wspólne dla kilku kategorii klientów dane teleadresowe, w drugiej specyficzne dane dla klientów pierwszego typu, w trzeciej specyficzne dane dla klientów drugiego typu.

Czyli rozumiem, że nie ma sensu trzymać takich danych (1:1) w osobnych tabelach tylko dołożyć przykładowo jedno pole z flagą jakiego typu klient to jest? Plus założyć indeksy?

Pozdrawiam.
Skobi
mozna tak to rozwiazac, natomiast nie znam dokladnej specyfikacji projektu i z racji tego rozwiazanie moze byc zupełnie inne.

Mam dla Ciebie pewna rade:
Stwórz bazę danych zapełnij ją przykładowymi danymi, a potem zobacz w jaki sposób bedziesz musiał pisac zapytania, jak przebiega aktualizacja danych i czy jest ono wygodne. W ten sposób mozesz dojsc do sedna sprawy.
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.