Chciałbym pobrać książki razem z ich najniższą ceną. Udało mi się to uzyskać zapytaniem:
SELECT i.*, s.* FROM books AS i INNER JOIN prices AS s ON i.id = s.id_book WHERE s.price = ( SELECT (min) price FROM prices AS z WHERE z.id_book = i.id );
Jednak jest ono wykonywane wolno (około 7s przy ~5000 rekordach). Przy dodanym limicie np. 20 działa szybko, ale im większy damy OFFSET (np. 2000) tym wolniej - 3s. Czy jest jakiś inny sposób żeby uzyskać pożądany przeze mnie efekt? W finalnym zapytaniu pobieram tylko konkretne kolumny - te gwiazdki pobierające wszystko są tylko na potrzeby zadania pytani. Z góry dziękuję za odpowiedzi.
Struktura:
Tabela books
+----+---------+
| id | name |
+----+---------+
| 1 | Test |
| 2 | Testowy |
| 3 | Testuje |
+----+---------+
Tabela prices
+----+---------+-------+
| id | id_book | price |
+----+---------+-------+
| 1 | 1 | 12.00 |
| 2 | 1 | 5.00 |
| 3 | 2 | 8.00 |
| 4 | 2 | 4.00 |
| 5 | 2 | 13.00 |
| 6 | 3 | 19.00 |
+----+---------+-------+