Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie generuje duże obciążenie serwera
Forum PHP.pl > Forum > Bazy danych > MySQL
nc715
Witam,
dostałem ostatnio od administratora wiadomość, że pewne zapytanie generuje duże obciążenie.

  1. SELECT *, SUM(op.price * op.quantity ) AS total_price FROM main_order o JOIN main_order_product op ON o.id_order = op.id_order GROUP BY o.id_order ORDER BY o.ordered_date DESC LIMIT 30,10


ktoś ma pomysł na to, bo nie bardzo się orientuje w temacie?
BaN
Brakuje najważniejszych informacji: jak wygląda EXPLAIN zapytania oraz jakie indeksy założone na tabelach. Poza konkursem: ile czasu wykonuje się to zapytanie i ile rekordów w tabelach

Na podstawie samego zapytania można stwierdzić, że indeksy muszą być założone na polu 'id_order' w obu tabelach, pewnie w jednej jest to primary

Naprawdę potrzebujesz wszystkich pól skoro jest SELECT *. I jakie to zapytanie ma wyciągnąć dane? Bo coś nie podoba mi się ORDER BY o.ordered_date DESC, prawdopodobnie można sortować po 'id_order'
mmmmmmm
Zapytanie jest źle napisane . Powinno być:
  1. SELECT o.id_order, o.ordered_date, SUM(op.price * op.quantity ) AS total_price FROM main_order o JOIN main_order_product op ON o.id_order = op.id_order GROUP BY o.id_order, o.ordered_date ORDER BY o.ordered_date DESC

Indexy (KEY-e) na: o.id_order, op.id_order, o.ordered_date
nc715
Dzięki za odpowiedź
zamiast * , wyszczególniłem konkretne pola i z 65 pól zostało mi 16 ; )

Czy to oznacza, że zapytanie powinno się wykonywać 4x szybciej teraz?
BaN
Cytat(nc715 @ 6.10.2012, 19:33:25 ) *
Czy to oznacza, że zapytanie powinno się wykonywać 4x szybciej teraz?


Nie
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.