gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:24:00 26 4
gpt4 key购买 nike

假设我有一个带有两组复选框的网页表单用户界面。使用第 1 组复选框,我可以勾选我想要的训练员(“Jason”、“Alexandra 等)” 使用第 2 组复选框,我可以勾选我想要看到的动物(“老虎”、“熊”、等等)一旦我提交了带有这些选项的表格,我就会得到一份符合标准的动物园列表(为了讨论起见,我们假设所有的训练员都在所有的动物园工作,所有的动物都在所有的动物园里)

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

假设我们正在使用具有数十万行(如果不是数百万行)的 Postgres 数据库。

  1. 使用“ILIKE”查询进行搜索更有效还是使用标准连接查询(例如,Zoo.includes(:animals, :trainers).where("animals.name = ?和 trainers.name = ?", animal_names, trainer_names)?
  2. 有没有比我刚才在上面 #1 中展示的方法更好的方法?

模型设置

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

编辑:假设我无权访问数据库 ID。

最佳答案

LIKE '%Jason%' 比查询确切的字符串 'Jason'(或查询 ID)效率低得多,因为虽然精确比较和一些 LIKE 可以在被查询的列上使用索引,LIKE with a pattern beginning with a wildcard can't use an index .

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

有无数更强大的文本搜索解决方案,包括 Postgres 内置的全文搜索和 Elasticsearch 等外部解决方案。如果没有特定的扩展要求,我会使用 LIKE,直到它开始变慢,然后才投资于更复杂的东西。

关于ruby-on-rails - 我应该对这些 ActiveRecord 关系使用 LIKE 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com