Rails Rails 5.0 与 Rails 5.1、Rails 5.2 关于 User.all 查询的疑问

lengcb · 2018年08月20日 · 最后由 msg7086 回复于 2018年08月23日 · 2057 次阅读

之前一直用 rails5.1 版本,平时查询时候,看 log 时也没怎么在意。最近接手了一个 rails5.0 版本的项目,里面有 8 万条用户数据,我在升级 rails5.2 时注意到了一个问题。在 console 中执行 User.all 查询时,显示的 sql 语句。

rails5.2

SELECT  "users".* FROM "users" LIMIT $1  [["LIMIT", 11]]

rails5.1

SELECT  `users`.* FROM `users` LIMIT 11

rails5.0

SELECT "users".* FROM "users"

查询效率上有上百倍的差距,我不明白 rails5.1、rails5.2 中这个 limit11 是哪里来的?

Rails 5.1.4 MySQL 没遇到 LIMIT 11Rails 5.2.1 PG 有LIMIT 11`

pathbox 回复

我在 rails5.1.6 的 mysql 中遇到过 limit11,这个还跟数据库有关吗?在 rails5.0 的 pg 中没有 limit11,在 rails5.2.1 的 pg 中有 limit11

coderliu 回复

谢谢!

lengcb 回复

不客气,我也是看了你的帖子去查了下才知道在 Console 下有这个特性😆

这个 hardcoded 11 真是看了难受

nouse 回复

因为 inspect 返回 10 条记录吧,所以多读一条。不过的确是做个什么常量比较好。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号