小编Chi*_*hip的帖子

如何在仍然利用索引的同时在两列之间进行查询?

想象一下,我有一个表格,其中包含一本书的所有章节以及每章的开始/结束页面.

chapter |   start_page     | end_page
--------------------------------------
   1    |        1         |    24
   2    |        25        |    67
   3    |        68        |    123
   4    |        124       |    244
   5    |        245       |    323
Run Code Online (Sandbox Code Playgroud)

我试图找出随机页面的章节,比如第215页.

我的第一个想法是使用这样的查询

SELECT `chapter`
FROM `book`
WHERE `start_page` <= 215
AND `end_page` >= 215
Run Code Online (Sandbox Code Playgroud)

不幸的是,MySQL无法利用上述查询中的索引,这是一个很大的问题,因为我的表格很大.

在做了一些研究之后,我想出了这个利用索引的查询.

SELECT `chapter`
FROM `book`
WHERE `start_page` <= 215
ORDER BY `start_page` DESC     
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

现在的问题是我希望能够在仍然利用索引的同时查询多个随机页面.我似乎不太可能修改我的上一个查询,因为它非常依赖于将结果限制为一个.

任何建议将不胜感激!

更新: 感谢Ray Toal的评论我有一个查询,它给了我惊人的性能所需的结果.

SELECT chapter 
FROM book 
WHERE (start_page = (SELECT max(start_page) FROM book WHERE start_page …
Run Code Online (Sandbox Code Playgroud)

mysql sql indexing

8
推荐指数
1
解决办法
1392
查看次数

标签 统计

indexing ×1

mysql ×1

sql ×1