我正在尝试像这样处理数据库中的记录:
rows = MyModel.joins("JOIN other_model ON other_model.my_model_id = my_model.id")
.joins("JOIN <some other join>")
.where("<conditions>")
rows.find_each(batch_size: 50, &:destroy)
我没有指定任何行顺序,所以我希望最终的SQL中不会有任何ORDER BY
子句。但是,当我运行此代码时,ActiveRecord
添加了一个ORDER BY
子句;该查询实际上看起来像这样:
... WHERE <conditions> ORDER BY "my_model"."id" ASC LIMIT 50;
这是一个问题,因为我在表中有很多记录,并且ORDER BY
子句使所有操作变慢。
我可能可以重写代码,以免使用ActiveRecord
选择ID,但是我想知道为什么ActiveRecord
会这样。为什么我不要求添加ORDER By
?有什么办法可以防止这种情况?