Я изучаю SQL с помощью PostgreSQL, и я пытаюсь изменить один из запросов с сайта PostgreSQL Tutorial.SQL Альтернатива использованию WHERE в качестве подзапроса
Исходный запрос заключается в следующем:
SELECT film_id, title
FROM film
WHERE film_id IN (
SELECT inventory.film_id
FROM rental
INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30'
);
Это работает, но я хочу, чтобы включить rental.return_date в моем выходе. Я был в состоянии добиться этого, используя следующие изменения, но это ужасно медленно (занимает 46096ms вместо 40мса):
SELECT film_id, title, return_date
FROM film, rental
WHERE film_id IN (
SELECT inventory.film_id
FROM rental
INNER JOIN inventory ON inventory.inventory_id = rental.inventory_id
WHERE return_date BETWEEN '2005-05-29' AND '2005-05-30'
)
ORDER BY return_date;
Я пошарил этот сайт, и я подозреваю, что мне нужно изменить ИНЕК к внутреннему ПРИСОЕДИНЯЙТЕСЬ, но мои попытки все провалились до сих пор. Есть ли простой способ ускорить этот запрос?
Если вы хотите помочь с выполнением вам необходимо обеспечить вывод EXPLAIN ANALYZE, или по крайней мере EXPLAIN. Тем не менее, существует непосредственная проблема в том, что вы добавили другую таблицу в свой ОТ, но не имеете ничего, что связывает ее с любой другой таблицей. Это создает декартово произведение, которое будет возвращать огромное количество строк, если одна из таблиц не имеет крошечного количества строк. –