Ruby on rails 我应该对这些ActiveRecord关系使用LIKE查询吗?

Ruby on rails 我应该对这些ActiveRecord关系使用LIKE查询吗?,ruby-on-rails,ruby,postgresql,rails-activerecord,Ruby On Rails,Ruby,Postgresql,Rails Activerecord,假设我有一个网页表单用户界面,有两组复选框。通过设置1复选框,我可以通过设置2复选框勾选我想要的驯兽师(“Jason”、“Alexandra等”),我可以勾选我想要看的动物(“老虎”、“熊”等)。一旦我提交带有这些选项的表格,我就会得到符合标准的动物园列表(为了便于讨论,假设所有的培训师都在所有的动物园工作,所有的动物都在所有的动物园工作) 我们将按“名称”运行数据库查询(例如,使用驯兽师名称和动物名称,而不是数据库ID进行搜索) 假设我们使用的是一个Postgres数据库,它有数十万行(如果不

假设我有一个网页表单用户界面,有两组复选框。通过设置1复选框,我可以通过设置2复选框勾选我想要的驯兽师(“Jason”、“Alexandra等”),我可以勾选我想要看的动物(“老虎”、“熊”等)。一旦我提交带有这些选项的表格,我就会得到符合标准的动物园列表(为了便于讨论,假设所有的培训师都在所有的动物园工作,所有的动物都在所有的动物园工作)

我们将按“名称”运行数据库查询(例如,使用驯兽师名称和动物名称,而不是数据库ID进行搜索)

假设我们使用的是一个Postgres数据库,它有数十万行(如果不是几百万行的话)

  • 使用“ILIKE”查询进行搜索是否更有效,或者最好执行标准的联接查询(例如,
    Zoo.includes(:anies,:trainers)。其中(“anies.name=?and trainers.name=?”,animal\u names,trainer\u names)
  • 有没有比我刚才在上文第1章中所展示的更好的方法
  • 模型设置

    classzoo

    编辑:假设我没有访问数据库ID的权限。

    如“%Jason%”
    比查询精确字符串“Jason”(或查询ID)的效率要低得多,因为虽然精确比较和使用
    可以对被查询的列使用索引

    但是,性能并不是这里最重要的考虑因素。
    比如%Jason%
    在一个大小合理的数据库上,在合理的负载下可能仍然足够快。如果应用程序确实需要按子字符串搜索内容(这意味着搜索可能有多个结果),这一要求不能通过简单的平等来满足


    有无数更强大的文本搜索解决方案,包括Postgres内置的全文搜索和Elasticsearch等外部解决方案。如果没有具体的扩展要求,我会选择
    之类的
    ,直到它开始减速,然后再投资于更复杂的东西。

    为什么不从e表单?很好,假设我也可以这样做。但我仍然想回答这个问题-假设我没有访问数据库id的权限。你需要什么样的
    我喜欢
    查询?你是在搜索“%Jason%”或“Jason%”还是只搜索“Jason”或其他什么?基本上都是-任何包含子字符串“Jason”的选项
    
    class Zoo < ActiveRecord::Base 
      has_many :animals, through: zoo_animals
      has_many :trainers, through: zoo_trainers
      has_many :zoo_trainers
      has_many :zoo_animals
    end  
    
    class Animal < ActiveRecord::Base
      has_many :zoos, through :zoo_animals
      has_many :zoo_animals
    end  
    
    class Trainer < ActiveRecord::Base
      has_many :zoos, through :zoo_trainers 
      has_many :zoo_trainers
    end  
    
    class ZooAnimal < ActiveRecord::Base
      belongs_to :animal
      belongs_to :zoo
    end
    
    class ZooTrainer < ActiveRecord::Base
      belongs_to :zoo
      belongs_to :trainer
    end