Представьте, что у меня есть таблица, содержащая все главы книги и начальную/конечную страницу из каждой главы.Как я могу запросить между двумя столбцами при использовании индексов?
chapter | start_page | end_page
--------------------------------------
1 | 1 | 24
2 | 25 | 67
3 | 68 | 123
4 | 124 | 244
5 | 245 | 323
Я пытаюсь выяснить, к какой главе относится случайная страница, скажем, страница 215.
Моя первая идея состояла в том, чтобы использовать запрос, как этот
SELECT `chapter`
FROM `book`
WHERE `start_page` <= 215
AND `end_page` >= 215
К сожалению, MySQL не может воспользоваться индексами в приведенном выше запросе, который является большой проблемой из-за большого размера моего стола.
После выполнения некоторых исследований я придумал этот запрос, который использует индексы.
SELECT `chapter`
FROM `book`
WHERE `start_page` <= 215
ORDER BY `start_page` DESC
LIMIT 1
Проблема теперь в том, что я хочу иметь возможность запрашивать несколько случайных страниц, все еще пользуясь индексами. Похоже, что я не могу изменить свой последний запрос, так как он настолько сильно зависит от предельных результатов.
Любой совет будет очень благодарен!
ОБНОВЛЕНИЕ: Спасибо за комментарий от Ray Toal У меня есть запрос, который дает мне результаты, которые мне нужны с потрясающей производительностью.
SELECT chapter
FROM book
WHERE (start_page = (SELECT max(start_page) FROM book WHERE start_page <= 73) AND end_page >= 73)
OR (start_page = (SELECT max(start_page) FROM book WHERE start_page <= 92) AND end_page >= 92)
OR (start_page = (SELECT max(start_page) FROM book WHERE start_page <= 300) AND end_page >= 300)
Идея, что вы хотите в одном запросе отправить несколько страниц и получить в результате таблицу со номерами страниц в паре с их главой? –
Мне нужен только стол чисел глав в результате. Я не требую, чтобы они были сопряжены с номерами страниц. – Chip
Итак, как-то вы хотите отправить набор номеров страниц, таких как 73, 92, 300 и хотите вернуться 3 и 5, правильно? –