例如,在 Ruby on Rails 上,如果 Actor 模型对象是 Tom Hanks,而“has_many”粉丝是 20,000 个 Fan 对象,那么
actor.fans
给出一个包含 20,000 个元素的 Array. 可能,元素没有预先填充值?否则,从数据库中获取每个 Actor 对象可能会非常耗时。
所以它是在“需要知道”的基础上吗?
那么访问actor.fans[500]时是否拉取数据,访问actor.fans[0]时是否拉取数据?如果它从每条记录跳到另一条记录,那么它将无法通过执行顺序读取来优化性能,这在硬盘上可能会更快,因为这些记录可能位于附近的扇区/盘片层——例如,如果程序接触 2 个随机元素,那么仅读取这 2 条记录会更快,但是如果它以随机顺序接触所有元素,那么仅以顺序方式读取所有记录,然后处理随机记录可能会更快元素。但是 RoR 怎么知道我是只做几个随机元素还是随机做所有元素?