mysql - 为什么 MyModel.offset(n).find(20) 在带有 MySQL 的 Rails 3 中这么慢?

标签 mysql ruby-on-rails activerecord

我正在使用 Rails 3 和 MySQL

在某些情况下,我想像这样从我的模型表中提取第一 block 记录:

MyModel.offset(10).first(50)

如果我在 Rails 控制台中运行它,Rails 和 MySQL 就会停止运行。

如果我在控制台中运行它时查看日志文件,我会得到以下信息!!

SELECT `my_models`.* FROM `my_models` LIMIT 18446744073709551615 OFFSET 10

代替

SELECT * from my_models LIMIT 50 offset 10

LIMIT 语句似乎有问题。 我配置不正确吗?

最佳答案

绝对是一个奇怪的错误。我已经在 Rails 3.0.10 和 3.1.0 中确认了这一点。据我所知,您不应该首先将数字传递给 first,因此您这样做时的行为可能是未定义的,但我会说它正在做的是一种不好的未定义。

你要做的是 MyModel.offset(10).limit(50)。 ActiveRecord::Base#first 只应在您希望完成“LIMIT 1”查询时使用。

我认为您的控制台已挂起,因为它试图实例化,然后检查并输出该表中几乎所有记录。

关于mysql - 为什么 MyModel.offset(n).find(20) 在带有 MySQL 的 Rails 3 中这么慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7135599/

相关文章:

php - 将数据库字段更新为当前值的 -1

javascript - rails react webpack 无法加载图像

ruby-on-rails - 在 Rails 应用程序中创建管理区域

ruby-on-rails - 如何知道模型何时被 :dependent => :destroy in rails? 自动销毁

ruby-on-rails-3 - 如何在 Rails 3 中为新列设置值?

MySQL 创建表失败,带有 varchar 列

mysql - 非常慢的mysql

ruby-on-rails - Rails ActiveRecord : building queries dynamically

mysql - 计算一个表中某一列中未出现在另一表中的行数

ruby-on-rails - 未知的操作错误