Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> JOIN na fragmencie
soomal
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 1
Dołączył: 4.03.2007

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


Wybieranie filmów podobnych na podstawie przypisanych im tagów.

tabela filmy:
film_id,adres,nazwa

tabela tag_film
film_id,tag_id

  1. SELECT DISTINCT filmy.film_id AS film_id,adres,nazwa
  2. FROM filmy INNER JOIN tag_film USING (film_id) WHERE tag_id IN (SELECT tag_id FROM tag_film WHERE film_id='.$film_id.')


Działa. Problem jest taki, że działa bardzo wolno.
Prawdopodobna przyczyna: Najpierw wykonywany jest join na całej tabeli, dopiero później wybiera się z niej fragment z film_id równy podanemu w zmiennej.

Jak można zoptymalizować to zapytanie?

Ten post edytował soomal 16.09.2007, 19:10:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sticker
post
Post #2





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


dodaj na początku zapytania explain i pokaż co pokazało to może coś zaradzimy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

btw. nie uważasz że to film_id AS film_id jest bez sensu (IMG:http://forum.php.pl/style_emoticons/default/snitch.gif)

WHERE tag_id IN (SELECT tag_id FROM tag_film WHERE film_id='.$film_id.') nie łatwiej where film_id='.$film_id.' ?

Ten post edytował sticker 16.09.2007, 20:05:25
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 4.10.2025 - 15:40