我在有过滤器选项的Rails的活动管理中有搜索功能:
filter :profile_display_name_or_profile_firstname_or_profile_lastname_or_email,
as: :string,
label: "Search Name/Email"
哪一项生成以下查询
"SELECT COUNT ( * ) FROM accounts LEFT OUTER JOIN profiles ON profiles . account_id =
accounts . id WHERE ( ( ( profiles . display_name LIKE ? OR profiles . firstname LIKE ? )
OR profiles . lastname LIKE ? ) OR accounts . email LIKE ? )"
这使得生产中的表现变得更慢。我想加快演出时间。
所以我试着把过滤器分开
filter :profile_display_name_or_profile_firstname_or_profile_lastname,
as: :string,
filters: [:starts_with, :equals, :contains, :ends_with],
label: "Search Name"
filter :email,
as: :string,
filters: [:starts_with, :equals, :contains, :ends_with],
label: "Search Email"
此外,我还想在First_Name、Last_Name、Display_Name上创建索引
add_index :profiles, %i[firstname lastname displayname],
name: "index_profiles_on_firstname_and_lastname_and_displayname"
我的问题是,我正在使用名字或姓氏或DisplayName进行搜索,我是否需要一次性或单独索引所有内容。
应该有什么好的解决方案来优化上述问题。谢谢
1条答案
按热度按时间nnt7mjpx1#
添加此索引
那就去做吧