Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Optymalizacja zapytania
Forum PHP.pl > Forum > Przedszkole
evolucja
W jaki sposób mogę zoptymalizować to zapytanie? Obecnie wykonuje się koło 50 sekund, natomiast po usunięciu 3 JOINa jest to kwestia niecałej sekundy.
  1. SELECT * FROM `clientgroupassign`
  2. LEFT JOIN `clients` ON `clientgroupassign`.clientId = `clients`.clientId
  3. LEFT JOIN `users` ON `carerId` = `userId`
  4. LEFT JOIN
  5. (SELECT * FROM
  6. (SELECT * FROM `contacts` WHERE `contactGroup` = 4 ORDER BY `contactId` DESC)
  7. AS `contacts`
  8. GROUP BY (`contactClientId`)
  9. ) AS `contacts` ON `contactClientId` = `clients`.clientId
  10. WHERE groupId = 4
  11. ORDER BY `clients`.clientId
basel
Ostatni LEFT JOIN zmień na RIGHT JOIN dla próby.
evolucja
Bez zmian. Nawet samo wywołanie:
"SELECT * FROM (SELECT * FROM `contacts` WHERE `contactGroup` = 4 ORDER BY `contactId` DESC)
AS `contacts`
GROUP BY (`contactClientId`)"
wszystko zawiesza i wykonuje się w nieskończoność..

W tym zapytaniu chcę pobrać 1 ostatni rekord z tabeli `contacts` dla każdego klienta będącego w grupie 4(bo klient może być w kilku grupach).
arrtxp
Rozbić na 2 zapytania ? Dodać indeksy ?
evolucja
Indeksy są, w tabeli kontakt wyglądają tak:

  1. Nazwa klucza Typ Jednoznaczny Spakowany Kolumna Moc Metoda porównywania napisów Null Komentarz
  2. PRIMARY BTREE Tak Nie contactId 30653 A
  3. contactClientId BTREE Nie Nie contactClientId 30653 A
  4. contactGroup 30653 A


Jak rozbić na dwa zapytania?
arrtxp
Przedstaw całą strukture tabel, bo te całe Twoje zapytanie do dupy jest niepodobne. Lub opisz co chcesz osiągnąć.
Damonsson
Cytat(evolucja @ 16.09.2013, 15:16:50 ) *
po usunięciu 3 JOINa jest to kwestia niecałej sekundy.

Dziwi Cię to? wink.gif

Do czego Ci te selecty w selectach?
phpion
Proponuję denormalizację poprzez dodanie osobnej kolumny, która będzie przechowywała ID ostatniego kontaktu. Zachowanie poprawności danych osiągniesz poprzez triggery.
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-2025 Invision Power Services, Inc.