1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。
数据库分页查询时,必须返回一个用于分页的token,这个token可以直接用于定位下一页的第一条数据。不能简单的使用limit offset的偏移量作为page token,在数据量大时无法降低查询时间复杂度。
这个观点的核心在于提高大数据集分页查询的效率。当数据量非常大时,使用 LIMIT
和 OFFSET
语句分页可能会导致性能问题,因为数据库需要跳过 OFFSET
指定数量的行来检索数据,这就意味着随着 OFFSET
的增加,查询效率会逐渐降低。
为了解决这个问题,可以使用基于游标(Cursor)或者称为 "Seek Method" 的分页方法。这种方法不是通过指定要跳过的记录数量来检索下一页,而是通过记录上一页最后一条记录的某个唯一键(通常是主键或者唯一索引),然后查询所有排序后的下一组记录。
这里是一个简单的示例,假设我们有一个 users
表,其中包含一个自增的 id
字段作为主键。
首先,我们需要一个 API,它不是接受一个页码,而是接受一个 last_seen_id
(上一页最后一个用户的 ID)作为参数来获取下一页的数据。
下面是一个示例代码,它使用 Flask 框架创建一个分页 API。为了简单起见,这个例子不包括数据库连接的细节:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
from flask import Flask, request, jsonify app = Flask(__name__) # 假设我们有一个数据库查询函数 def query_db(query, args = (), one = False ): # 这里应该是执行数据库查询的代码,比如使用 pymysql 或者 sqlalchemy # 这里只是为了示例,不提供具体实现 pass # 分页查询的API @app .route( '/users' , methods = [ 'GET' ]) def get_users(): # 设置默认每页数量和最大数量 default_page_size = 10 max_page_size = 100 # 从请求中获取 last_seen_id 和每页数量参数 last_seen_id = request.args.get( 'last_seen_id' , None ) page_size = int (request.args.get( 'page_size' , default_page_size)) # 限制page_size不能超过最大限制 if page_size > max_page_size: page_size = max_page_size # 创建查询,使用 last_seen_id 定位下一页数据 if last_seen_id: query = "SELECT * FROM users WHERE id > %s ORDER BY id ASC LIMIT %s" args = (last_seen_id, page_size) else : # 如果没有提供 last_seen_id,就返回第一页数据 query = "SELECT * FROM users ORDER BY id ASC LIMIT %s" args = (page_size,) # 执行查询 users = query_db(query, args) # 将查询结果转换为字典列表 # 假设每个 user 是一个元组(id, name) users_list = [{ 'id' : user[ 0 ], 'name' : user[ 1 ]} for user in users] last_seen_id = users[ - 1 ][ 0 ] if users else None # 返回JSON响应 return jsonify({ 'users' : users_list, 'last_seen_id' : last_seen_id }) # 启动Flask应用 if __name__ = = '__main__' : app.run(debug = True ) |
使用这个 API,客户端可以通过指定 last_seen_id
参数来获取下一页的数据,例如 /users?last_seen_id=100&page_size=20
将获取 ID 大于 100 的下一页 20 条用户记录。
这种方法的优点是,无论你要获取的是第一页还是第一百万页,查询的效率都是一样的,因为数据库总是从上一页的最后一个 id
开始查找下一组记录,而不需要跳过任何行。这样可以大大提高查询的效率,尤其是在处理大型数据集时。
到此这篇关于mysql中token的作用的文章就介绍到这了。
学习资料见知识星球。
以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。
快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利!
更多技巧, www.excelbook.cn
欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;
1、价值上万元的专业的PPT报告模板。
2、专业案例分析和解读笔记。
3、实用的Excel、Word、PPT技巧。
4、VIP讨论群,共享资源。
5、优惠的会员商品。
6、一次付费只需99元,即可下载本站文章涉及的文件和软件。