Kom*_*mbo 2 ruby ruby-on-rails ruby-on-rails-3
我已经使用Ryan Bate的Ajax剧集搜索来编写一些基本的搜索功能.
它基本上做的是从表单中获取一个字符串,并通过模型方法执行类似的查询.我要做的是有条件地搜索数据库中的不同列(due_date和name),并使用我用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
Run Code Online (Sandbox Code Playgroud)
这就像用户键入日期一样,Date类能够解析它,在数据库中查找具有该due_date的任何对象.问题是,如果它是一个日期并且它能够被解析,那么搜索速度非常慢.
我想知道是否有人有办法加快速度.Date类是如此之慢吗?我应该有两种不同的方法吗?或者我应该完全重写我的搜索?
我真的怀疑它Date.parse很慢.您应该检查log/development.log查询执行时间.您最有可能遇到的是表扫描,因为您错过了索引due_date.
始终使用检查慢查询EXAMINE.一个例子:
EXAMINE SELECT * FROM items WHERE due_date='2011-01-01'
Run Code Online (Sandbox Code Playgroud)
您将获得有关它将要排序的行数以及可以使用的任何索引的一些信息.