这是一个普遍适用于MySQL、Oracle DB或其他可能存在的数据库的问题。
我知道MySQL有LIMIT offset,size;,而对于Oracle,则有'ROW_NUMBER'或类似的东西。
但是,当这种“分页”查询连续调用时,数据库引擎是否实际上每次都执行整个“选择”,然后每次检索不同的结果子集?还是它仅执行一次总体的结果获取,将结果保存在内存中或其他地方,然后根据偏移和大小为后续查询提供来自中的结果子集呢?
如果它每次都执行完整的获取操作,那么它似乎非常低效。
如果它只执行一次完整的获取操作,那么它必须以某种方式“存储”查询,以便下次查询到达时,它知道已经获取了所有数据,只需从中提取下一页即可。在这种情况下,数据库引擎如何处理多个线程?两个执行相同查询的线程怎么办?
我很困惑 :(