Mam ostatnio pewną zagwozdkę której nie mogę rozwiązać i chciałbym byście wpadli do PHPMyAdmina, wybrali swoją bazę i w zakładce SQL odpalili tę komendę i podzieli się wynikiem w jakim czasie została ona zrealizowana.
Nie obawiajcie się, jest to komenda wyświetlająca ostatnie 200 zamówień z produktami które zostały zakupione.
Po wyświetleniu wyników u góry pojawi się napis Pokazano wiersze 0 - 199 (200 ogółem, Wykonanie zapytania trwało 0.1940 sekund(y).) -
SELECT SQL_NO_CACHE SQL_CALC_FOUND_ROWS
a.`id_order`, `total_paid_tax_incl`, `payment`, `tracking_number`, a.`date_add` AS `date_add`,
`current_state`, a.id_currency, CONCAT(c.`firstname`, ' ', c.`lastname`) AS `customer`, osl.`name` AS `osname`,
os.`color`,
(
SELECT
LEFT(
GROUP_CONCAT(
odd.product_name SEPARATOR " || "
),
105
)
FROM
`ps_order_detail` odd
WHERE
odd.id_order = a.id_order
) AS products,
IF(
(
SELECT
so.id_order
FROM
`ps_orders` so
WHERE
so.id_customer = a.id_customer AND so.id_order < a.id_order
LIMIT 1
) > 0,
0,
1
) AS NEW, country_lang.name AS cname, IF(a.valid, 1, 0) badge_success
FROM
`ps_orders` a
LEFT JOIN
`ps_order_carrier` oc
ON
a.`id_order` = oc.`id_order`
LEFT JOIN
`ps_customer` c
ON
(c.`id_customer` = a.`id_customer`)
INNER JOIN
`ps_address` address
ON
address.id_address = a.id_address_delivery
INNER JOIN
`ps_country` country
ON
address.id_country = country.id_country
INNER JOIN
`ps_country_lang` country_lang
ON
(
country.`id_country` = country_lang.`id_country` AND country_lang.`id_lang` = 1
)
LEFT JOIN
`ps_order_state` os
ON
(
os.`id_order_state` = a.`current_state`
)
LEFT JOIN
`ps_order_state_lang` osl
ON
(
os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = 1
)
WHERE
1
ORDER BY
a.`id_order`
DESC
LIMIT 0, 200
Dlaczego pytam? Otóż na localhoście to konkretne zapytanie jest całkiem szybkie, natomiast na produkcji zajmuje około 3-4 sekundy pomimo tej samej konfiguracji ustawień bazy danych. Różncia jest tylko w procesorze i chciałbym się dowiedzieć czy tylko u mnie takie zapytanie wykonuje się powoli.
Ogólnie inne zapytania np wyświetlenie listy produktów wykonują się podobnie czasowo localhost vs produkcja, localhost jest szybszy może x2, ale akurat w powyższym zapytaniu różnica jest po prostu kolosalna. No chyba, że może ktoś wie jak to zapytanie zoptymalizować.
Znalazłem rozwiązanie swojego problemu w trakcie zakładania tego tematu. W moim zapytaniu którego tutaj nie zamieściłem znajdował się dodatkowo LEFT JOIN którego nie zawarłem specjalnie ponieważ odwoływał się do kolumn innego modułu. Podmiana na zwykły JOIN wystarczyłby zoptymalizować zapytanie do grubo poniżej sekundy
Question
hakeryk2
Witam,
Mam ostatnio pewną zagwozdkę której nie mogę rozwiązać i chciałbym byście wpadli do PHPMyAdmina, wybrali swoją bazę i w zakładce SQL odpalili tę komendę i podzieli się wynikiem w jakim czasie została ona zrealizowana.
Nie obawiajcie się, jest to komenda wyświetlająca ostatnie 200 zamówień z produktami które zostały zakupione.
Po wyświetleniu wyników u góry pojawi się napis Pokazano wiersze 0 - 199 (200 ogółem, Wykonanie zapytania trwało 0.1940 sekund(y).) -
Dlaczego pytam? Otóż na localhoście to konkretne zapytanie jest całkiem szybkie, natomiast na produkcji zajmuje około 3-4 sekundy pomimo tej samej konfiguracji ustawień bazy danych. Różncia jest tylko w procesorze i chciałbym się dowiedzieć czy tylko u mnie takie zapytanie wykonuje się powoli.
Ogólnie inne zapytania np wyświetlenie listy produktów wykonują się podobnie czasowo localhost vs produkcja, localhost jest szybszy może x2, ale akurat w powyższym zapytaniu różnica jest po prostu kolosalna. No chyba, że może ktoś wie jak to zapytanie zoptymalizować.
EDYCJA
-----------------------------------------------------------------
Znalazłem rozwiązanie swojego problemu w trakcie zakładania tego tematu. W moim zapytaniu którego tutaj nie zamieściłem znajdował się dodatkowo LEFT JOIN którego nie zawarłem specjalnie ponieważ odwoływał się do kolumn innego modułu. Podmiana na zwykły JOIN wystarczyłby zoptymalizować zapytanie do grubo poniżej sekundy
Edited by hakeryk2 (see edit history)Link to comment
Share on other sites
2 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now