1. 游标是什么?作用是什么?
游标,又称数据库指针。主要用于在结果集中移动到某一数据行的数据结构,类似于编程语言迭代器的概念,代表某一行的指针。
2. mysql 游标的特性和语法。
定义: DECLARE cursor_name CURSOR FOR select_statement
OPEN cursor_name
FETCH cursor_name INTO var_name [,var_name ] ...
CLOSE cursor_name
注意点: 游标必须声明在处理程序之前,并且在声明变量之后。
5.7 游标 特性:
① 敏感 :游标的结果集是否对数据库中更改敏感,如果敏感,数据库基础数据发生变化时,游标的结果集也会相应的变化。敏感游标指向实际数据,不敏感游标指向数据副本。是否敏感取决配置:cursor_type: SENSITIVE、INSENSITIVE
② 只读 :游标的结果集是只读的,不能被更新。不能通过游标来修改基础表的数据。
③ 非滚动 :游标只能按照一个方向遍历结果集,并且不能跳过行。
3. 偏移量是什么? 作用是什么?
limit 子句用来约束 select 语句的返回行数,limit 接收 一个或两个参数。分别是 offset 和 row_count。offset 表示指定要返回第一行的偏移量。
当使用偏移量进行分页时,数据库引擎首先会扫描并跳过指定偏移量数量的记录,然后返回所需的行数。随着偏移量的增加,数据库引擎需要在每次查询中跳过更多的记录,导致了查询速度变慢。
4. 游标 和 偏移量 用法的优劣?
对于偏移量:
优势:使用偏移量分页实现相对简单,还可以实现跳页查询访问。
劣势:
①,基于偏移量分页,在数据量很大时,查询效率会比较低。反观 where 查询则可以使用 b+树索引 去进行筛选,O(logn) > > O(n)
②,在并发场景下会出现数据重复。例如 offset 在第二页时,有人在第一页插入数据或者删除数据。
③,显式的 Page 参数,在支持跳页的同时,也会被爬虫并发请求。这是因为爬虫可以通过增加 page 参数值,就可以顺序的获取下一页数据,而不需要维护任何状态或位置信息。
对于游标分页:
优势:
①,性能好。另外 使用where 条件进行分页时,每次查询都要扫描整个数据集以匹配 where 条件。
②,并发安全。使用游标进行分页操作时,通常会记录当前查询的位置或状态,这个位置或状态在不同的查询之间是独立的,因此在多个并发查询中,每个查询都可以有自己独立的游标状态,不会相互影响。
③,不会被无脑批量爬取。使用游标进行分页查询时,通常是通过在查询中记录上一次查询结果的位置或状态,然后根据这个位置或状态来获取下一页的数据,这种方式增加爬虫的复杂度。
劣势:
①,实现相较于偏移量较复杂。
②,不支持跳页。
③,不合适多检索条件的场景。游标分页适用于基于某一单一排序字段的连续分页,例如按照 ID、时间戳等单一字段进行排序。在涉及多个检索条件的情况下,游标分页的实现会比较复杂,并且可能导致性能下降。
标签:分页,游标,偏移量,查询,cursor,mysql,name From: https://www.cnblogs.com/yanyanglaoyuan/p/18150783