【发布时间】:2011-07-20 23:11:41
【问题描述】:
背景
我有一个显示网络漫画的网页。目前有 1622 页。我需要显示当前漫画页面(我有它的 ID),以及指向第一页、上一页、下一页和最后一页的链接。排序也很重要(由于古怪的数据库设计 - 遗留的东西,有一个很长的 ORDER BY),所以我也不能做像“where ID=1”这样的事情。
问题
所以,问题很简单 - 我知道记录的 ID。我执行SELECT ... FROM ... WHERE ... ORDER BY ... 查询,想要检索第一条记录、最后一条记录、具有我知道的 ID 的记录,以及直接在具有已知 ID 的记录之前和之后的记录。
未过滤的查询返回超过 1600 行,并且每天都有一个新行。查询将每秒运行几次(有一个公平的读者群)。最有效的方法是什么?有什么比天真的“获取所有行并过滤掉我在 PHP 代码中需要的内容”更好的方法?请注意,我知道我可以在 PHP 端缓存结果,但我想知道这里是否有一些与 MySQL 相关的优化。
添加:一种解决方案是执行多个查询 - 每个所需值一个。我应该说我知道它并且正在考虑更优雅的东西。
【问题讨论】:
标签: mysql optimization