gpt4 book ai didi

mysql - 长 IN 子句是一种代码味道吗?

转载 作者:可可西里 更新时间:2023-11-01 06:32:30 29 4
gpt4 key购买 nike

简单的问题。想知道长 IN 子句是否是一种代码味道?我真的不知道如何证明它。除了我认为的那样,我不知道为什么它会闻起来。

select
name,
code,
capital,
population,
flower,
bird
from us_states
where
code in
('NJ', 'NY', 'PA', 'CA', 'AL', 'AK', 'AZ',
'IL', 'IN', 'KY', 'KS', 'DC', 'MD', 'MA')

数据库通常如何实现这样的查找?是否制作并加入了临时表?或者它只是扩展为一系列逻辑或?

感觉应该是join...

我并不是说所有 IN 子句都不好。有时你忍不住。但在某些情况下(尤其是时间越长),您要匹配的元素集实际上来自某个地方。难道不应该加入吗?

是否值得创建(通过应用程序级别)一个临时表,其中包含您要搜索的所有元素,然后对其进行真正的连接?

select u.*
from us_states u

join #chosen_states t
on u.code = t.code

最佳答案

我认为这是一种代码味道。一方面,数据库对 IN 子句中允许的元素数量有限制,如果您的 SQL 是动态生成的,您最终可能会遇到这些限制。

当列表开始变长时,我会转换为使用带有临时表的存储过程,以避免出现任何错误。

我怀疑性能是一个主要问题,IN 子句非常快,因为它们可以短路,这与 NOT IN 子句不同。

关于mysql - 长 IN 子句是一种代码味道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6219501/

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