我用过 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/