Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
Balon
Niedawno pisałem z prosba o pomoc w ustaleniu logiki tworzenia zapytania na konkretnym przykładzie.

http://forum.php.pl/index.php?showtopic=68582&hl=

Na takiej zasadzie jaką wymyśliłem sobie tam stworzyłem tą wyszukiwarkę. Zawiera ona 7 pól. Docelowo będzie około 20.

Teraz problem jest taki, tak jak pisałem w tamtym temacie, że zapytanie to będzie bardzo wolne. Jednak okazało się, że jest jeszcze gorzej. To zapytanie mi wiesza serwer lokalny.. Można się domyślić że dlatego że porównuje dane z 15 kopii tabel...

Zapytanie wygląda tak..
  1. SELECT i.*, u.name
  2. FROM items i, users u, cechy c1, cechy c2, cechy c3, cechy c4, cechy c5, cechy c6, cechy c7, details d1, details d2, details d3, details d4, details d5, details d6, details d7
  3. WHERE i.id = d1.id AND i.id = d2.id AND i.id = d3.id AND i.id = d4.id AND i.id = d5.id AND i.id = d6.id AND i.id = d7.id AND i.userid = u.id AND d1.id_cecha = c1.id AND d1.value LIKE "%1%" AND c1.name = "Aparat" AND d2.id_cecha = c2.id AND d2.value LIKE "%%" AND c2.name = "Cena" AND d3.id_cecha = c3.id AND d3.value LIKE "%1%" AND c3.name = "JAVA" AND d4.id_cecha = c4.id AND d4.value LIKE "%13%" AND c4.name = "Model" AND d5.id_cecha = c5.id AND d5.value LIKE "%1%" AND c5.name = "Polifionia" AND d6.id_cecha = c6.id AND d6.value LIKE "%7%" AND c6.name = "Producent" AND d7.id_cecha = c7.id AND d7.value LIKE "%%" AND c7.name = "Rok produkcji"


Trochę za dużo jak na głupią szukajke, nie ? smile.gif

Czy ktoś jest w stanie naprowadzić mnie na sposób zoptymalizowania tego zapytania ? To dla mnie bardzo ważne - aktualny projekt...

Pozdrawiam,
Balon !
Sedziwoj
pytanie, dlaczego cechy trzymasz w osobnych tabelach?
Balon
Cechy trzymam osobno tak żeby można je było szybko łatwo edytować i dodawać. Poza tym są 4 różne podstrony o zróżnicowanych cechach. Starałem się zrobić wszystko tak aby można było łatwo poszerzać stronę o nowe podstrony, cechy itd.
Sedziwoj
I co będziesz wszędzie tworzył tabeli a potem złączał 200 takich samych?
Tak mi się nasunął przykład, to jakby tworzenie tabeli z informacją o pracowniku dla każdego z działów firmy...
Pytanie ile masz danych w tych tabelkach, że wywala serwer?
Balon
cechy : 19 rekordów
details : 36 rekordów
items : 8 rekordów

Wiem, że to głupie z tym zapytaniem do wyszukiwania.. Dlatego pytam czy jest jakaś alternatywa.
Sedziwoj
Skoro robisz LIKE to po co się męczysz?
A przy zagadnieniu indexowani, czy ogólnie wyszukiwania informacji, nie pomogę, bo sam się tym nie interesowałem i nie mam wiedzy którą mógł bym się dzielić.
Balon
Cytat(Sedziwoj @ 18.05.2007, 22:37:25 ) *
Skoro robisz LIKE to po co się męczysz?


Nie rozumiem... snitch.gif

Myślę sobie, że osobno będę pobierał te detale + cechy zapytanie po zapytaniu i będę to cache'ował. I po sprawie będzie winksmiley.jpg

EDIT: Jednak nie, bo co mi to da... I tak żeby szukać to wszystko to będę musiał łączyć tabele..
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-2024 Invision Power Services, Inc.