На виртуальном хостинге установлен MySQL 8.0, на макбуке M2 (ОЗУ 8 Гб) - MySQL 9.5.
Собственно, сам запрос:
SELECT pc2.category_id as id, COUNT(pc2.product_id) as total FROM oc_product_to_category pc JOIN oc_product_to_category pc2 ON pc.product_id = pc2.product_id JOIN oc_product p ON pc.product_id = p.product_id WHERE pc.category_id = 907 AND pc2.category_id IN (866,879,880,881,882,883,886,889,890,891,892,893,896,378,385,297,115,119,118,149,148,154,121,163,122,83,171,71,45,175,81,298,59,26,62,921) AND p.status = 1 GROUP BY pc2.category_id;
На макбуке время выполнения - 0.048s, в то время как на хостинге - 0.03s. Казалось бы, на маке запросы должны исполняться гораздо быстрее, ведь на shared-хостинге ресурсы очень урезаны и сайты работают медленно. Но почему-то на макбуке время хуже в 1.5 раз.
В чём может быть причина? Может, сервер MySQL лучше оптимизирован под LINUX? Или нужно правильно настроить my.cnf? (В данный момент его нет).
Результат EXPLAIN c макбука:
spoiler| -> Table scan on <temporary>
-> Aggregate using temporary table
-> Nested loop inner join (cost=1768 rows=5498)
-> Nested loop inner join (cost=506 rows=344)
-> Filter: (p.`status` = 1) (cost=386 rows=344)
-> Table scan on p (cost=386 rows=3436)
-> Single-row covering index lookup on pc using PRIMARY (product_id = p.product_id, category_id = 907) (cost=0.25 rows=1)
-> Filter: (pc2.category_id in (866,879,880,881,882,883,886,889,890,891,892,893,896,378,385,297,115,119,118,149,148,154,121,163,122,83,171,71,45,175,81,298,59,26,62,921)) (cost=0.476 rows=16)
-> Covering index lookup on pc2 using PRIMARY (product_id = p.product_id) (cost=0.476 rows=32)
|
Результат EXPLAIN c phpMyAdmin хостинга (тут доступа к терминалу нет):