gpt4 book ai didi

mysql - 当我发送整数时,在带有数据类型字符串的 Rails ActiveRecord 列中搜索速度很慢

转载 作者:行者123 更新时间:2023-11-30 00:54:46 24 4
gpt4 key购买 nike

我们有一个Registrations表有近百万行。这张表上有一个字段 my_string_id_field有一个索引。 my_string_id_fieldstring类型,但是许多 id 都是整数。

当我进行搜索时,例如: Registraions.where(my_string_id_field: 12345) Rails 认为是一个 Integer 并且最终不会使用 my_string_id_field 上的索引。这最终会变得 super 慢!

这个sql的结果是 SELECT `registrations`.* FROM `registrations` WHERE `registrations`.`my_string_id_field` = 12345

如果我进行如下搜索: Registraions.where(my_string_id_field: '12345') Rails 将以字符串形式发送参数,mysql 使用索引,一切又变得很快了。

这个sql的结果是
SELECT `registrations`.* FROM `registrations` WHERE `registrations`.`my_string_id_field` = '12345'

我知道我可以简单地做类似 Registraions.where(my_string_id_field: var.to_s) 的事情并让 ruby​​ 将其转换为字符串,但我必须记住每次都这样做。有没有什么方法可以强制 Rails 识别它正在搜索的字段是字符串数据类型并始终传递我将其作为字符串传递的任何内容?

最佳答案

您可以定义一个范围,例如

scope :search, lambda{|id| where(my_string_id_field: id.to_s)}

然后您就可以在任何地方使用此范围。

关于mysql - 当我发送整数时,在带有数据类型字符串的 Rails ActiveRecord 列中搜索速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673510/

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