对于大多数关系数据库的大多数驱动程序,访问结果的默认和首选方法是使用游标或迭代器。
我猜测的是数据库的功能如下:
每当数据库驱动程序调用获取下一个结果时,它都会将该游标传递给数据库,从而得到下一个结果。
但是,我不确定这是否真的正确。让我感到困惑的一件事是,如果数据库客户端和数据库服务器位于不同的节点上并通过网络进行通信,这不是很慢吗?它真的使用这种懒惰的方法吗?有意义的是不返回所有数据,但是它有一些中间路径吗?
答案 0 :(得分:9)
光标是指示位置的移动放置或指针。自16世纪以来,讲英语的人就使用了这个术语,用于各种可移动或移动的位置标记。 wikipedia description
应该在文本编辑器中想象一下光标的图像。它(在某些情况下)是指针(光标)在给定数据集中的占位符。使用cursor.fetchone()返回一行(即一行),并将光标前进到下一行/行的开头。
游标抽象出当前在数据库客户端缓冲的行数。当光标接近缓冲区的末尾时,底层框架将获取更多内容。默认值通常是对内存分配,网络延迟和其他因素之间良好折衷的良好猜测。
这成为优化的问题。 Google地图提供了一个很好的比较。用户可以平移,似乎整个国家地图已下载到客户端,但实际上它是在您需要之前下载相邻的面板。
让数据库客户端执行此缓冲可以使程序员在需要优化之前不必考虑它。
答案 1 :(得分:4)
数据库一次性发送完整的结果集。游标/迭代器位于客户端的驱动程序中。