Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Jak oceniacie wydajnośc zapytania %LIKE%?
Forum PHP.pl > Forum > Bazy danych
luis2luis
Witam.

Potrzebuje wybrać dane z tabeli, które są w określonej grupie kategorii.


  1. tab: GRUPY:
  2. GRUPA_ID GRUPA_NAZWA
  3. 100, Grupa 1
  4. 200, Grupa 2
  5. 300, Grupa 3
  6.  
  7.  
  8. tab: KAT:
  9. KAT_ID KAT_NAZWA GRUPA_ID
  10. 1, Moja_nazwaaaa 1, 200
  11. 2, Moja_nazwaaaa 2, 200
  12. 3, Moja_nazwaaaa 3, 300
  13. 4, Moja_nazwaaaa 4, 300
  14. 5, Moja_nazwaaaa 5, 200
  15.  
  16.  
  17. tab: BLOG:
  18. BLOG_ID BLOG_NAZWA
  19. 1, Mój_blog 1
  20. 2, Mój_blog 2
  21. 3, Mój_blog 3
  22. 4, Mój_blog 4
  23. 5, Mój_blog 5
  24.  
  25. //informacja o przypisaniu danego artykułu do wybranej kategorii
  26. tab: BLOG_KATEGORIE:
  27. BLOG_ID KAT_ID,
  28. 1, 2
  29. 1, 4
  30. 1, 5
  31. 4, 2
  32. 5, 2
  33. 6, 4


teraz potrzebuje szybko wybrać artykuły bloga które nalezą do grupy kategorii 200. Jak bedzie najwydajneij?

Czy nie lepiej dodać do tabeli BLOG kolumny BLOG_KAT_GRUPA w której zamieszczę listę grup w których jest dany artykuł, np rozdzielając je kreseczką |1|2| i nastepnie wyszukiwać WHERE LIKE %podana_grupa%? Jak to bedzie z wydajnością takiego rozwiązania?
nospor
Nie. Struktura co masz teraz czyli z tabela laczaca jest najlepsza z mozliwych
LowiczakPL
jeśli 1 kategoria może należeć do kilku grup to dodatkowa kolumna

i szukasz za pomocą WHERE id_szukane IN (1,2,3,4,5,6) w żadnym wypadku LIKE wink.gif
luis2luis
Cytat(LowiczakPL @ 24.06.2016, 19:12:33 ) *
jeśli 1 kategoria może należeć do kilku grup to dodatkowa kolumna

i szukasz za pomocą WHERE id_szukane IN (1,2,3,4,5,6) w żadnym wypadku LIKE wink.gif


Jedna kategoria jest tylko w jednej grupie, nie może być w kilku.

Za to artykuł bloga może być za to w kilku kategoriach i tutaj w tym momencie muszę mieć dostęp do informacji, z których grup są kategorie do których przypisany jest dany artykuł.

Proszę mi podpowiedziec, czy nie moge zrobić to za pomoca nadmiarowości danych czyli, żeby nie przeszukiwac za każdym razem tych wszystkich tabel, może po prostu w tabeli BLOG mogę zapisac listę grup w których jest?
Pytanie jest jak to zapisać, żebym mogł łatwo wyszukać.

Cytat(nospor @ 24.06.2016, 16:33:45 ) *
Nie. Struktura co masz teraz czyli z tabela laczaca jest najlepsza z mozliwych


tak, ale przy większej ilości kategorii, takie złożone zapytanie moze być problematyczne, co byscie powiedzieli, na nadmiarowość danych? Czyli zapisac w Tabeli z artykułami (Tab: BLOG) informacje o grupach?
nospor
Cytat
tak, ale przy większej ilości kategorii, takie złożone zapytanie moze być problematyczne, co byscie powiedzieli, na nadmiarowość danych? Czyli zapisac w Tabeli z artykułami (Tab: BLOG) informacje o grupach?
A sprawdzales? Ja gdy mam tego typu dylematy, generuje milion rekordow i wiem na pewno czy zapytanie moze byc problematyczne czy nie.
Poza tym, zawsze mozesz wpierw pobrac kategorie ktore naleza do danej grupy i skrocic swoje glowne zapytanie juz tylko do wybranych kategorii
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.