对于大多数关系数据库的大多数驱动程序,访问结果的默认和首选方法是使用游标或迭代器。
我猜是数据库做了类似的事情:
- 运行查询。
- 准备结果,将其存储在 RAM 中?
- 将结果的光标返回给客户端。
每当数据库驱动程序调用获取下一个结果时,它都会将该游标传递给数据库,数据库会给出下一个结果。
但是,我不确定这是否真的正确。让我难过的一件事是,如果数据库客户端和数据库服务器在不同的节点上并通过网络进行通信,这不是很慢吗?真的用了这么偷懒的方法吗?不返回所有数据是有道理的,但是它需要一些中间路径吗?
对于大多数关系数据库的大多数驱动程序,访问结果的默认和首选方法是使用游标或迭代器。
我猜是数据库做了类似的事情:
每当数据库驱动程序调用获取下一个结果时,它都会将该游标传递给数据库,数据库会给出下一个结果。
但是,我不确定这是否真的正确。让我难过的一件事是,如果数据库客户端和数据库服务器在不同的节点上并通过网络进行通信,这不是很慢吗?真的用了这么偷懒的方法吗?不返回所有数据是有道理的,但是它需要一些中间路径吗?
光标是指示位置的移动位置或指针。自 16 世纪以来,讲英语的人就使用具有此含义的术语来表示各种可移动或可移动的位置标记。 维基百科描述
它应该在文本编辑器中召唤出光标的图像。它是(在某些情况下)指针(光标)在给定数据集中的位置的占位符。使用 cursor.fetchone() 返回一行(即一行),并且光标前进到下一行/行的开头。
游标抽象出当前在数据库客户端缓冲的行数。当光标接近缓冲区的末尾时,底层框架将获取更多内容。默认值通常是在内存分配、网络延迟和其他因素之间进行良好权衡的一个很好的猜测。
它变成了一个优化问题。谷歌地图提供了一个很好的比较。用户可以四处移动,看起来整个国家地图都已下载到客户端,但实际上它是在您需要相邻面板之前下载它们。
让数据库客户端执行此缓冲使程序员不必在需要优化之前考虑它。
数据库一次性发送完整的结果集。游标/迭代器位于客户端的驱动程序中。