![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 7.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Mam 3 tabele : products, products_gallery, products_categories
Relacje: "products" 1 -> wielu "products_gallery" "products" 1 -> wielu "products_categories" Chce pobrać wszystkie grafiki produktów, informacje o produkcie z listy produktó∑, któ®e należą do pewnej grupy kategorii. Moje zapytanie ma postać:
ale to zapytanie trwa prawie 3 sekundy i dodatkowo "wiesza się" przy większej liczbie kategorii (ponad 10 kategorii). Struktura tabel: PRODUCTS:
PRODUCTS_GALLERY:
PRODUCTS_CATEGORIES:
Jakieś propozycje? Ten post edytował o_d 1.06.2012, 10:35:59 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
To zapytanie wygląda dobrze.
Problem polega na ilości przesyłanych danych. Samo zapytanie zapewne trwa krótko, ale przesłanie wielu obrazków do aplikacji trwa długo z uwagi na ilość danych i tego nie zmienisz. Rady: mniej obrazków, ajax, obrazki gorszej jakości... Ten post edytował bpskiba 31.05.2012, 15:45:22 |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
Klucze sa? Daj explaina z tego zapytania i pokaz strukture bazy
Ten post edytował maly_swd 31.05.2012, 16:52:45 -------------------- śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu.. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Cytat To zapytanie wygląda dobrze. - na pewno mamy na myśli to samo zapytanie? ![]()
Iloczyn kartezjański tabel rzadko kiedy bywa wydajny... jeśli masz 3 tabele po 10 rekordów to tak, jakbyś pobierał dane z jednej tabeli 1000 rekordów. Praktykuje się JOINy i podzapytania. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 7.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
zaktualizowałem opis o strukturę tabelek. Co można z tym zrobić? Proszę o pomoc.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 341 Pomógł: 40 Dołączył: 23.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
pilsner:: nie jest to iloczyn kartezjanski, nie potrzeba pisac slowa join by okreslic relacje miedzy tabelami
o_d:: pokaz nam explaina, wtedy bedzie mozna wiecej cos powiedziec. poza tym - sprawdz co nam tutaj pokazales p.productID=pc.productID p.productID=pg.prod_productID gdzie: products AS p, products_categories AS pc, products_gallery AS pg przy czym w tabeli products_categories nie ma takiego pola. wiec jesli jest tak jak piszesz - to nie moze dzialac. brak kluczy na polach ktore laczysz : products_gallery.prod_productID << tutaj index da ci znaczny wzrost wydajnosci. wiecej moglbym powiedziec gdy poprawisz/odpowiesz/wkleisz explaina pytanie, czy uzywasz do czegokolwiek klucza catID ? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 590 Pomógł: 185 Dołączył: 19.04.2006 Skąd: Gdańsk Ostrzeżenie: (0%) ![]() ![]() |
Cytat Chce pobrać wszystkie grafiki produktów, informacje o produkcie z listy produktó∑, któ®e należą do pewnej grupy kategorii. Zacznijmy od grup kategorii, czyli od początku - stwórz zapytanie, które pobierze ID produktów należących do określonych grup:
Teraz trzeba użyć tych ID by pobrać produkty:
Teraz trzeba pobrać grafiki:
Tak to widzę na podstawie tego, co napisałeś. Poeksperymentuj z tą strukturą, dodaj indeksy na pola po których szukasz i łączych tabele a powinno śmigać. |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 7.12.2007 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Faktycznie podałem niepoprawnąstruktuę tabeli. Oto właściwa:
Zapytanie działa. Oto co zwraca mi explain: Kod id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE pc ALL NULL NULL NULL NULL 4854 Using where; Using temporary; Using filesort 1 SIMPLE pg ALL NULL NULL NULL NULL 4911 Using join buffer 1 SIMPLE p eq_ref PRIMARY PRIMARY 4 fancydot2.pc.productID 1 Using where |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 340 Pomógł: 49 Dołączył: 3.07.2009 Skąd: Rzeszów Ostrzeżenie: (0%) ![]() ![]() |
Explain wskazuje na brak wykorzystania indeksów podczas wykonywania zapytania. Czyli musisz eksperymentować z indeksami
To jest główny problem. Ten post edytował bpskiba 1.06.2012, 21:25:43 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 12:52 |