即使没有指示,也会添加一个ORDER BY子句

时间:2019-02-18 05:10:16

标签: sql ruby-on-rails postgresql activerecord

我正在尝试像这样处理数据库中的记录:

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?有什么办法可以防止这种情况?

0 个答案:

没有答案