Повышение производительности запроса с помощью коррелированного подзапроса. - PullRequest
0 голосов
/ 29 января 2019

У меня есть таблица «книга», которая содержит 2 столбца: заголовок и цена.Есть ряд книг с разными ценами.Я предложил следующий запрос, но как я могу улучшить производительность?

Select title from book as b 
where (
  select count(*) from book as t
  where t.price>b.price
) < 5

1 Ответ

0 голосов
/ 29 января 2019

Если вы используете MySQL 8+ или более поздней версии, то мы можем легко использовать ROW_NUMBER здесь:

WITH cte AS (
    SELECT title, ROW_NUMBER() OVER (ORDER BY price DESC) rn
    FROM book
)

SELECT title
FROM cte
WHERE rn <= 5;

Это не учитывает возможность привязки двух или более книг кпо той же цене.В этом случае мы могли бы использовать аналитическую функцию ранга вместо номера строки.

...