数据库'光标'如何工作?

Van*_*ril 14 sql database cursor

对于大多数关系数据库的大多数驱动程序,访问结果的默认和首选方法是使用游标或迭代器.

我猜的是数据库做的事情如下:

  1. 运行查询.
  2. 准备结果,将其存储在RAM中?
  3. 将结果的光标返回给客户端.

每当数据库驱动程序调用获取下一个结果时,它就会将该游标传递给数据库,从而得到下一个结果.

但是,我不确定这是否真的正确.让我感到困惑的一件事是,如果数据库客户端和数据库服务器位于不同的节点上并通过网络进行通信,这不是很慢吗?它真的使用这种懒惰的方法吗?不返回所有数据是有意义的,但是它有一些中间路径吗?

Dav*_*d W 9

光标是指示位置的移动放置或指针.自16世纪以来,讲英语的人就使用了这个术语,用于各种可移动或移动的位置标记. 维基百科的描述

它应该在文本编辑器中形成光标的图像.它(在某些情况下)是指针(光标)在给定数据集中的占位符.使用cursor.fetchone()返回一行(即一行),并将光标前进到下一行/行的开头.

游标抽象出当前在数据库客户端缓冲的行数.当光标接近缓冲区的末尾时,底层框架将获取更多内容.默认值通常是对内存分配,网络延迟和其他因素之间的良好折衷的良好猜测.

它成为一个优化问题.Google地图提供了一个很好的比较.用户可以平移,似乎整个国家地图已下载到客户端,但实际上它是在您需要之前下载相邻的面板.

让数据库客户端执行此缓冲可以使程序员在需要优化之前不必考虑它.


小智 3

数据库一次性发送完整的结果集。游标/迭代器位于客户端的驱动程序中。

  • 它可能是也可能不是“一次性”,但它的批量肯定比单个记录大得多。 (3认同)
  • 那么这个答案是否具有误导性? (3认同)