Optymalizacja zbyt długiego zapytania SQL |
Optymalizacja zbyt długiego zapytania SQL |
30.12.2014, 10:59:09
Post
#1
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) |
Witam serdecznie,
Mam problem z zapytaniem:
Kiedyś to zapytanie działało poprawnie, jednak od jakiegoś czasu przestało.... Według serwerowni "zapytanie jest zbyt długie i wykonuje się 10 sekund". Czy ma ktoś może jakiś pomysł jak to zoptymalizować? Bardzo proszę o pomoc, Northwest |
|
|
30.12.2014, 11:00:51
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) |
WHERE kategoria IN(1,2,3) itd.
|
|
|
30.12.2014, 11:03:08
Post
#3
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) |
|
|
|
30.12.2014, 11:03:20
Post
#4
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 35 Dołączył: 29.12.2014 Skąd: Otwock Ostrzeżenie: (0%) |
Jak rozumiem to są jakieś wybrane kategorie tak?
Jesli nie zrób SELECT-WHERE=SELECT Druga opcja to zamienić te wszystkie OR na IN ARRAY Wtedy zamiast tego nawiasu masz:
Druga opcja. Jeśli te kategorie są w jakiejś tabeli i spełniają jakiś wspólny warunek możesz zrobić:
Np. te numerki to dajmy na to id z tabeli kategorie i muszą spełniać warunek spelnia = 1
Wygodniejsze bo unikasz dodatkowego ręcznego dopisywania jak dojdzie nowa kategoria Ten post edytował SpiritCode 30.12.2014, 11:07:30 |
|
|
30.12.2014, 11:06:56
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 291 Pomógł: 829 Dołączył: 14.02.2009 Skąd: łódź Ostrzeżenie: (0%) |
czyli coś takiego:
Tak. Indeksy na `kategoria` tez mogą pomóc. |
|
|
30.12.2014, 11:33:11
Post
#6
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) |
tak, to są numery ID poszczególnych kategorii które wybrał użytkownik....
Przepraszam za głupie pytanie, ale które z powyższych zapytań będzie najbardziej optymalne?;-) tabela z danymi wygląda tak:
|
|
|
30.12.2014, 11:58:30
Post
#7
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 35 Dołączył: 29.12.2014 Skąd: Otwock Ostrzeżenie: (0%) |
Skoro mówisz, ze to wybrane kategorie przez użytkownika to bez wątpienia metoda IN (id, id, id [..]).
Metodę z drugim select którą Ci przedstawiłem warto używać jeśli masz np. Kategorie podzielone na kilka grup i każda z nich ma swoją grupę zaznaczoną. Wtedy jeśli szukasz kategorii z danej grupy Dajesz tego SELECT'a z warunkiem na grupę i pobierasz tylko te |
|
|
30.12.2014, 12:34:39
Post
#8
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) |
Dziękuję za pomoc :-)
Mam jeszcze jedno pytanie, tą listę kategorii generuje sobie takim "dzikim" kodem:
tabela wygląda następująco:
Dałoby się to jakoś poprawić? Przez ten kawałek kodu skrypt mega długo się generuje |
|
|
30.12.2014, 13:11:46
Post
#9
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 35 Dołączył: 29.12.2014 Skąd: Otwock Ostrzeżenie: (0%) |
Ależ oczywiście
Pytanie tylko czy chcesz pobrać wszystkie kategorie w górę czy w dół? Dzięci czy rodziców? dla wszystkich rodziców danej kategorii
dla wszystkich dzieci:
Sprawdź czy działają zamiast {$id} podajesz id kategorii dla której szukasz kategorii w górę lub w dół edit: poprawka pierwszego zapytania. Brakło pól Ten post edytował SpiritCode 30.12.2014, 13:13:29 |
|
|
30.12.2014, 13:48:18
Post
#10
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) |
dziękuje, działa
chociaż chyba jednak nie do końca ;-) Jeśli jestem na "najwyższym poziomie" danej kategorii - to nie wyświetla produktów (zastosowałem 2 zapytanie).... Dopiero jak wybiorę jakiś konkretny parent - do której są przyporządkowane produkty - to się pokazują.... Chciałbym żeby w momencie gdy mam coś takiego: 1. kategoria główna 2. podkategoria 3. grupa 4. podgrupa To po kliknięciu KATEGORIA GŁÓWNA - widzę wszystkie produkty z poziomu 1,2,3,4. Po kliknięciu na GRUPA - widzę produkty z poziomu 3 i 4.... Nie wiem czy jasno to opsiałem? |
|
|
30.12.2014, 13:51:23
Post
#11
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 35 Dołączył: 29.12.2014 Skąd: Otwock Ostrzeżenie: (0%) |
To łączysz zapytania.
Zaciągnij sobie wszystkie dzieci dla interesującej Cię kategorii. Za pomocą wyciągniętych z nich ID wyszukaj produkty które takie ID mają |
|
|
30.12.2014, 13:53:24
Post
#12
|
|
Grupa: Zarejestrowani Postów: 788 Pomógł: 1 Dołączył: 17.09.2004 Ostrzeżenie: (10%) |
tzn mam zapytanie które generuje mi najpierw te kategoria IN (......) i potem dodaje je to, co wygeneruje się w zapytaniu kategorii do produktów:
select * from produkty where enable = 1 and kategoriaIN(....) i właśnie na najwyższym poziomie nie wyświetla mi produktów - tylko na niższych... |
|
|
30.12.2014, 14:00:34
Post
#13
|
|
Grupa: Zarejestrowani Postów: 167 Pomógł: 35 Dołączył: 29.12.2014 Skąd: Otwock Ostrzeżenie: (0%) |
Nie no zapytania które Ci podałem zwracają Ci kategorie od tych co podałeś w dół oraz w górę, łącznie z tą wybrana kategorią
edit: czyli tak ale to mam rozumieć, że nie chcesz wyświetlać produktów z tych kategorii których szukasz dzieci lub rodziców? Ten post edytował SpiritCode 30.12.2014, 14:02:46 |
|
|
Wersja Lo-Fi | Aktualny czas: 13.06.2024 - 11:49 |