遇到一个面试题:
题目:假设有 100 个分类,每个分类下有至少 1000 个商品,请实现一个分页程序,要求根据客户端给定的分类 ID 和排序字段,返回下一页的数据
代码使用 php 实现,可以依赖 Laravel 实现。其他组件如 Mysql 、Redis 等等没有限制。如果实现困难,排序字段可以假设只有一个。
要求:程序运行效率较高,在商品数达到百万级别的情况下,也能高效运行
提示:直接使用一行 sql 查询到结果的方式是无法满足高效运行的,会出现慢 sql
方法示例:
/**
* @param int $categoryId 分类 ID
* @param string $sortField 排序字段
* @param int $page 当前第几页
* @param int $perPage 每页数量
*/
public function nextPage(int $categoryId, string $sortField = 'price', int $page =1, int $perPage=20)
{
....
}
现在能想到的是先给字段加特定的索引,但是也是一条 sql 就出来了,redis 其他的没用到,请问下如何更高的提高效率
假设表结构是这样的
* --------------
* id | goods_id | category_id | price | created_at | updated_at
* -------------
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.