Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wydajność
Forum PHP.pl > Forum > Bazy danych > MySQL
zzeus
Witam.
może ktoś z was przeprowadził kiedyś jakieś testy na wydajność, w takim przypadku:
mamy w tabeli np. produkty, i każdy produkt jest opisany przez słowa kluczowe
a. lepiej trzymac te słowa kluczowe w polu text i przeszukiwać za pomocą like
b. zrobić tablice słownikową ze słowami kluczowymi, i dodatkową tablice która będzie łączyć produkt ze słowami kluczowymi

Które rozwiązanie lepsze, gorsze i dlaczego ?

Pozdrawiam
bregovic
Testów, co prawda, nie przeprowadzałem, ale mogę tobie powiedzieć że jeśli masz małą ilość produktów to nie ma znaczenia. Jeśli natomiast masz ich trochę więcej, to HABTM które opisujesz sprawdzi się lepiej - jest bardziej elastyczne (możesz szukać w dwie strony) i odpada ci ten paskudny LIKE.
zzeus
Ilość produktów będzie duża, liczona w tysiącach. Z tym że jeśli wybiorę opcję b to tabela łącząca będzie ogromna, kilkadziesiąt tysięcy rekordów ...
nospor
Cytat
tabela łącząca będzie ogromna, kilkadziesiąt tysięcy rekordów

To nie jest "ogromna". To jest małe pierdniecie dla bazy winksmiley.jpg

Oczywiscie ze opcja b - elastyczna, latwe wyszukiwanie, itp.
bregovic
Nawet jeśli tabela łącząca będzie ogromna, będzie wciąż zawierała tylko dwie kolumny - tag_id i product_id. Linkowanie poprzez taką tabelę jest dość proste, i można to załatwić bez szczególnie skomplikowanego SQL. Ale to tak na prawdę zależy od twojego użycia tagów. Jeśli np chcesz szukać produktów poprzez tagi, to IMO dość prosty SELECT będzie szybszy niż LIKE na tysiącach rekordów.
zzeus
Cytat(nospor @ 5.11.2008, 11:54:44 ) *
To nie jest "ogromna". To jest małe pierdniecie dla bazy winksmiley.jpg

Oczywiscie ze opcja b - elastyczna, latwe wyszukiwanie, itp.


No może z tym słowem "ogromna" troszkę przesadziłem smile.gif
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.