从MySQL中间检索第一个,最后一个和3个记录的最有效方法是什么?

Vil*_*lx- 5 mysql optimization

背景

我有一个显示webcomics的网页.目前有1622页.我需要显示当前的漫画页面(我有它的ID),以及指向第一页,上一页,下一页和最后一页的链接.排序也是非常重要的(由于奇怪的数据库设计有很长的ORDER BY - 传统的东西),所以我不能做"ID = 1"之类的东西.

这个问题

所以,问题很简单 - 我知道记录的ID.我进行SELECT ... FROM ... WHERE ... ORDER BY ...查询并希望检索第一条记录,最后一条记录,具有我所知道ID的记录,以及具有已知ID的记录之前和之后的记录.

未过滤的查询返回超过1600行,并且每天都有一个新行.查询将每秒运行几次(有一个公平的读者群).什么是最有效的方式?还有什么比天真的"获取所有行并过滤掉我需要的PHP代码"更好的东西吗?请注意,我知道我可以在PHP端缓存结果,但我想知道这里是否有一些与MySQL相关的优化.

补充:一种解决方案是执行多个查询 - 每个查询需要一个查询.我应该说我知道它并且正在考虑更优雅的东西.

Jas*_*son 5

为什么不以正确的方式添加顺序和排序的OrderedID列?您最初可以使用复杂查询填充,然后在添加新页面时保持更新.

如果不能修改现有表,您可以创建一个只有两列的新表,一个指向您的页表的FK,以及一个如上所述的OrderedID列?

这意味着对于任何页面ID = X,您将需要1,X-1,X,X + 1和Max() - 只有Max()实际上需要一个查询,并且每天只会更改一次.其他人可以算一算.