Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Optymalizacja zapytania
Forum PHP.pl > Forum > Bazy danych
neo1986kk
Witam, mam pytanie, ponieważ myślę, że moje doświadczenie z językiem SQL nie pozwala mi odpowiedzieć czy moje zapytanie jest już zotymalizowane na maxa czy jeszcze da się je przyspieszyć bo powiem szczerze ze 2.6307 sek dla 500 rekordów to trochę długo.


  1. SELECT o.GID, (
  2.  
  3. SELECT d.date
  4. FROM deliveries d
  5. WHERE d.ORDER = o.GID
  6. ORDER BY d.date DESC
  7. LIMIT 1
  8. ) AS mdate, o.STATUS, d1.date
  9. FROM orders o
  10. LEFT JOIN deliveries d1 ON o.GID = d1.ORDER
  11. LEFT JOIN deliveries_sended ds ON d1.GID = ds.delivery
  12. WHERE (
  13. o.STATUS =6
  14. AND ds.date >'2016-02-10'
  15. )
  16. OR o.STATUS !=6
  17. GROUP BY o.GID
  18. ORDER BY o.date DESC


Zapytanie ma pobierać rekordy z bazy orders, które mają status różny od 6, lub takie które mają status 6, ale są wysłane (deliveries_sended) później niż 10 lutego

Z góry dzięki za odpowiedzi. Pozdrawiam.


Edit:

Wywaliłem Selecta w selekcie i teraz jest 1,6 sek dla 500 rekordów, to i tak sporo


  1. SELECT o.GID, o.STATUS, d1.date
  2. FROM orders o
  3. LEFT JOIN deliveries d1 ON o.GID = d1.ORDER
  4. LEFT JOIN deliveries_sended ds ON d1.GID = ds.delivery
  5. WHERE (
  6. o.STATUS =6
  7. AND ds.date >'2016-02-10'
  8. )
  9. OR o.STATUS !=6
  10. GROUP BY o.GID
  11. ORDER BY o.date DESC

patryczakowy
Sprawdź zapytanie przy pomocy EXPLAIN - to ci powinno dużo podpowiedzieć
mmmmmmm
Wywal LEFT JOINy. Raczej w wynikach nic nie zmieni, a dostanie niesamowitego kopa
kajzur
Indeksy masz pozakładane?
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.