Skocz do zawartości

Problem z wydajnością zapytania MySQL


garyoldman

Rekomendowane odpowiedzi

Witam!

Mam problem z wydajnością zapytania do bazy. Wygląda ono następująco:

SELECT cos FROM tabela1 WHERE id IN (SELECT fk_id FROM tabela2 WHERE jakies_id=4)

i teraz tak:

tabela1: 11098 rekordów

tabela2: 3900 rekordów (warunek WHERE jakies_id=4 ogranicza do 30)

Zapytanie wykonuje się od 15 do 20 paru sekund... a docelowo tabela2 będzie posiadać co najmniej 10 razy więcej rekordów co pewnie w ogóle wydłuży strasznie czas wykonywania zapytania. Da się jakoś lepiej zbudować takie zapytanie, albo zoptymalizować je?

Jakie dobre pozycje książkowe lub stronki poświęcone optymalizacji zapytań możecie polecić?

EDIT:

Poradziłem sobie trochę tak "na około" tzn. zrobiłem tak:

$query = "SELECT fk_id FROM tabela2 WHERE jakies_id=4";
$wynik = $this->db->query($query);

while ($row = mysql_fetch_array($wynik))
{
$ids .= $row["fk_id"].",";
}

$query = "SELECT cos FROM tabela1 WHERE id IN (".substr($ids, 0, strlen($ids)-1).")";
$wynik = $this->db->query($query);

Zapytanie wykonuje się już bardzo szybko. Ale dalej mam pytanie, czy da się skrócić czas z tych 20 sekund samą konstrukcją zapytania? Jakoś zoptymalizować je...

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

SELECT cos FROM tabela1 JOIN tabela2 ON (tabela1.id = tabela2.fk_id)  
WHERE  tabela2.jakies_id=4

ewentualnie

SELECT cos FROM tabela1 JOIN tabela2 ON (tabela2.jakies_id=4 AND tabela1.id = tabela2.fk_id)

no i oczywiście tak jak Eddy na sam wpierw sprawdził bym indeksy :)

edit:

ewentualnie jeszcze

SELECT cos FROM tabela1 JOIN (select FK_ID from tabela2 WHERE tabela2.jakies_id=4) jakis_alias  ON ( tabela1.id = jakis_alias.fk_id)

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności