[英]How to create a index to search firstname or last name (Active Admin in rails)
我在具有过滤器选项的 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"
我的问题是我正在使用名字或姓氏或显示名进行搜索,我是否需要全部索引一次或单独索引。
什么应该是优化上述查询的好解决方案。谢谢
添加此索引
FULLTEXT(display_name, firstname, lastname, lastname, email)
然后做
WHERE MATCH(display_name, firstname, lastname, lastname, email)
AGAINST('?' IN BOOLEAN MODE)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.