gpt4 book ai didi

Mysql(和 Postgresql)在 where = 1 和 in(1) 上的性能

转载 作者:行者123 更新时间:2023-11-29 04:49:15 25 4
gpt4 key购买 nike

出于好奇,有谁知道当你这样做时是否存在任何重大的性能差异......

Select something Where foo=1 

...和...

Select something Where foo In(1)    #just one item not multiple

...在 Mysql 和 Postgresql 上的单个或联合 SQL 查询中。

问题是我正在构建 Ruby on Rails scopes我想知道哪种方法更好,

为多个项目创建一个范围 (IN),为将使用相等 (=) 的单个项目创建一个范围

scope :with_owner_ids, lambda{|owner_class, *ids| where(owner_type: owner_class.model_name, owner_id: ids.flatten)}
scope :with_owner, lambda{|owner| where(owner_type: owner.class.model_name, owner_id: owner.id)}
#... where `foos`.`owner_class`='User' and `foos`.`owner_id` = 15

或更清洁,为多个项目创建范围 (IN),而不是仅仅将此范围传递给单个项目的另一个范围(IN 以及)

scope :with_owner_ids, lambda{|owner_class, *ids| where(owner_type: owner_class.model_name, owner_id: ids.flatten)}
scope :with_owner, lambda{|owner| with_owner_ids(owner.class, owner.id)}
#... where `foos`.`owner_class`='User' and `foos`.`owner_id` IN (15)

最佳答案

一个非常简单的表上的 PostgreSQL 示例:

CREATE TABLE a (
a_id integer
, t_id integer
);

COPY a
FROM STDIN;
1 1
2 1
3 1
4 4
\.

EXPLAIN ANALYZE SELECT * FROM a WHERE t_id IN (1);

Seq Scan on a (cost=0.00..36.75 rows=11 width=8) (actual time=0.056..0.059 rows=3 loops=1)
Filter: (t_id = 1)
Total runtime: 41.795 ms

Filter: (t_id = 1) 部分可以清楚地看出 IN (1) 被翻译成简单的相等检查,因此两种形式之间没有区别.

我把 MySQL 部分留给其他人:)

关于Mysql(和 Postgresql)在 where = 1 和 in(1) 上的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13798986/

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