Как я могу запрашивать между двумя столбцами, все еще используя преимущества индексов?

Представьте себе, что у меня есть таблица, содержит все главы книги и страницы начала / конца из каждой главы.

chapter |   start_page     | end_page
--------------------------------------
   1    |        1         |    24
   2    |        25        |    67
   3    |        68        |    123
   4    |        124       |    244
   5    |        245       |    323

Я пытаюсь выяснить, на какой главе случайная страница наступает, давайте скажем, например. Page 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)
8
задан Chip 17 September 2011 в 03:48
поделиться