У меня есть этот запрос, для выполнения которого требуется 36 с, и я не понимаю, почему и как я могу его улучшить. Любая помощь?
SELECT p.* FROM products p INNER JOIN product_store ps ON p.id = ps.product_id
INNER JOIN stores s ON s.id = ps.store_id WHERE s.city = 'Berlin' GROUP BY p.id LIMIT 16 OFFSET 0;
Это следующие цифры:
SELECT count(*) FROM products;
43309
SELECT count(*) FROM product_store;
1456445
SELECT count(*) FROM stores;
155
Я полагаю, что это может быть для таблицы отношений, но 36 с - это слишком много для 16 строк.
Есть идеи, как улучшить этот запрос?
РЕДАКТИРОВАТЬ:
По любой причине проблема не в Postgres, а в Hibernate. Запрос довольно быстрый в pgAdmin 4, но очень медленный в Hibernate.
Спасибо всем!
РЕДАКТИРОВАТЬ 2:
Анализ
РЕДАКТИРОВАТЬ 3:
Извините, это реальная проблема, когда я добавляю "DISTINCT"
SELECT DISTINCT p.* FROM products p INNER JOIN product_store ps ON p.id = ps.product_id
INNER JOIN stores s ON s.id = ps.store_id WHERE s.city = 'Berlin' GROUP BY p.id LIMIT 16 OFFSET 0;
ПРОИЗВОДСТВО
МЕСТНЫЙ