Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co jest szybsze przy tysiącach rekordów? Jedna tabela czy kilka?
Forum PHP.pl > Forum > Bazy danych > MySQL
el maciaso
Przepisuję od nowa istniejący już serwis który posiada dobrych kilka tysięcy rekordów (artykułów). W starej bazie informacje dla jednego artykułu był przechowywane w wielu tabelach. W nowej chcę wszystko co dotyczy artykułów trzymać w jednej tabeli. Nie jestem tylko pewny jednej rzeczy: każdy artykuł będzie mógł być przypisany do jednej z 3 podstawowych kategorii oraz do jednej bądź kilku podkategorii (ok 10). Czy szybsze przy tylu rekordach będzie wyszukiwanie i filtrowanie po różnych polach w tej samej tabeli czy takie kategorie lepiej jest umieścić w tabeli categories i przypisywać do nich artykuły poprzez tabelę post_categories za pomocą klucza?
Zależy mi na tym żeby czas zapytania był jak najkrótszy nawet jak będzie kilkadziesiąt tysięcy rekordów a będę chciał otrzymać wynik zapytania gdzie artykuł ma kategorię A, podkategorię B i C, autora D, datę dodania od X do Y, a tytuł zawiera frazę "lorem ipsum".
Crozin
Przy liczbie raptem kilkudziesięciu tysięcy nie powinieneś mieć żadnych problemów z wydajnością. Powinieneś skupić się na poprawnej strukturze bazy.
1. Artykuły, kategorie i autorzy to osobne obiekty więc powinny być w osobnych tabelach.
2. Kategorie i podkategorie to jak domyślam się dokładnie ten sam typ obiektu jedynie w strukturze drzewiastej - powinno być w jednej tabeli. Co do samego drzewka w sieci jest od groma informacji na ten temat.
3. Artykuły i kategorie są powiązane klasyczną relacją wiele-do-wielu więc będziemy mieli dodatkową tabelę wyłącznie na potrzeby tej relacji, tak jak podałeś.
4. Jeżeli będziesz chciał wyszukiwać artykuły nie "w jednej z n kategorii" tylko "będące we wszystkich n kategoriach" od razu zapisz sobie w zakładkach mój post z innego wątku z dzisiaj: http://forum.php.pl/index.php?s=&showt...t&p=1186255
el maciaso
Artykuły i autorzy bez wątpienia będą trzymane w osobnych tabelach, ale zastanawiam się czy jest sens robić kolejną dla dosłownie trzech kategorii. Prawdopodobnie nie będzie jednak podkategorii a tak jak pisałem będzie możliwość wyboru tylko jednej kategorii głównej. Czy nie będzie zatem lepiej jeśli utworzę kolumnę category i będę wpisywał 1, 2 lub 3 zamiast zaprzęgać w zapytanie dodatkową tabelę? Wiem, że przy paru tysiącach rekordów to nie będzie miało znaczenia ale nie jestem w stanie przewidzieć ich liczby za parę lat i wolę mieć to przewidziane.
nospor
Cytat
Wiem, że przy paru tysiącach rekordów to nie będzie miało znaczenia ale nie jestem w stanie przewidzieć ich liczby za parę lat i wolę mieć to przewidziane.
Z jednej strony sam piszesz ze nie wiesz co bedzie za pare lat, a zdrugiej strony sam ograniczasz strukture bazy i za pare lat bedzie z tym problem... Zrob raz a dobrze i za pare lat wszystko bedzie ok.
Raz a dobrze znaczy ze masz zrobic tak jak pisal Crozin
el maciaso
Macie rację. Trzeba zrobić to w poprawny sposób, żeby później nie było problemów.
Domyślam się również, że wyrzucenie kategorii do osobnej tabeli nei będzie miało większego wpływu na szybkość.
nospor
Cytat
Domyślam się również, że wyrzucenie kategorii do osobnej tabeli nei będzie miało większego wpływu na szybkość.
Nie bedzie mialo
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.