ruby-on-rails - 按 Date.parse(string) 搜索非常慢?

标签 ruby-on-rails ruby ruby-on-rails-3

我用过 Ryan Bate's search with Ajax episode编写一些基本的搜索功能。

它基本上做的是从表单中获取一个字符串,并通过模型方法执行类似的查询。我想要做的是使用我用 Date 类解析的单个字符串有条件地搜索数据库中的不同列(到期日期和名称)。这样,用户可以按日期或具有相同形式的项目名称搜索项目。我的方法如下:

def self.search(search) 
    if search
      search_date = Date.parse(search) rescue nil
    end

    if search_date
      where('due_date = ?', search_date)
    elsif search
      where('UPPER(name) LIKE ?', "%#{search.upcase}%")
    else
      scoped
    end
  end  

这是有效的,就好像用户输入一个日期,Date 类能够解析它,在数据库中查找任何具有该 due_date 的对象。问题是,如果它是一个日期并且能够被解析,那么搜索速度会非常慢。

我想知道是否有人可以加快速度。是 Date 类这么慢吗?我应该有两种不同的方法吗?还是我应该完全重写我的搜索?

最佳答案

我真的怀疑是 Date.parse 变慢了。您应该检查 log/development.log 以查看查询执行时间。您最有可能遇到的是表扫描,因为您缺少 due_date 的索引。

始终使用 EXAMINE 检查慢速查询。一个例子:

EXAMINE SELECT * FROM items WHERE due_date='2011-01-01'

您将获得有关必须排序的行数的一些信息,以及可以使用的任何索引。

关于ruby-on-rails - 按 Date.parse(string) 搜索非常慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7682755/

相关文章:

jquery - 在 Jquery AND Rails 中,如何获取字符串的可见字符数?

sql - 如何动态更新 Ruby on Rails 中的列

java - 将 fxml 与 jruby 一起使用

ios - 如何在发送到服务器(Ruby on Rails)时对表情符号进行编码?

ruby-on-rails - 结合 Rails 3 中的关联顺序

javascript - 独立于编程语言的模型验证

ruby - 发送电子邮件 : Devise, Heroku 和 Rails 3

ruby - After_save, After_create (order) (Ruby on rails)

ruby-on-rails - Backbone + Rails 'Paperclip' 异步上传

mysql - Rails 将 `AND (1=0)` 添加到查询中