Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] Jak oceniacie wydajnośc zapytania %LIKE%?
luis2luis
post 24.06.2016, 15:17:21
Post #1





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

Ostrzeżenie: (0%)
-----


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?

Ten post edytował luis2luis 24.06.2016, 15:18:38
Go to the top of the page
+Quote Post
nospor
post 24.06.2016, 15:33:45
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie. Struktura co masz teraz czyli z tabela laczaca jest najlepsza z mozliwych


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
LowiczakPL
post 24.06.2016, 18:12:33
Post #3





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


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


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
luis2luis
post 26.06.2016, 13:18:12
Post #4





Grupa: Zarejestrowani
Postów: 190
Pomógł: 0
Dołączył: 25.11.2015

Ostrzeżenie: (0%)
-----


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?

Ten post edytował luis2luis 26.06.2016, 13:06:36
Go to the top of the page
+Quote Post
nospor
post 27.06.2016, 10:16:06
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:11