Mysql 使用1个SQL检索多个记录或使用多个SQL检索单个记录

Mysql 使用1个SQL检索多个记录或使用多个SQL检索单个记录,mysql,sql,Mysql,Sql,我想问一下,1是否比另一个有任何性能优势 以下是一个例子: // suppose I want to retrieve 10000 different records select * from table_a where from in (1,2,3,4,5,6 .... 10000) // alternatively select * from table_a where from=1 or from=2 or from=3 ... from=10000 相比 select *

我想问一下,1是否比另一个有任何性能优势

以下是一个例子:

// suppose I want to retrieve 10000 different records
select * 
from table_a 
where from in (1,2,3,4,5,6 .... 10000)

// alternatively
select * 
from table_a 
where from=1 or from=2 or from=3 ... from=10000
相比

select * from table_a where from=1
select * from table_a where from=2
select * from table_a where from=3
.
.
select * from table_a where from=10000
哪种情况下一方的表现优于另一方


这里简化了
子句,它可能有嵌套的AND和OR子句。

除了您的简单示例之外,还有许多因素

对于确切的示例1,查询优于1000,因为示例很简单,只针对一个字段。 主要因素是网络I/O操作、物理和/或逻辑读取 诸如此类

但是如果你有更多的WHERE条件,特别是当有连接时,那就有问题了,什么更好。 它取决于实际的数据库表、关系、索引设计、连接类型、表的大小和(等等)。。。 在大多数情况下,作为一般指导,1SQL更好,但其他因素可能比这更重要。
所有这些都从非常仔细的数据库设计开始。那里的错误(经常发生)要花费很多时间。
通常,当数据库设计不好时,1000个查询会更好。

如您所示,在这种情况下,使用单个sql语句应该会有更好的性能。你也可以把where子句简化为@Shiping,是的,我的例子太简单了,那些有多个and子句的呢?为了简单起见,我使用了连续数。实际sql具有不连续的随机数。一般来说,IO访问越少,性能越好。当然总会有例外。@Shiping,在这种情况下,所有语句都在单个DB访问中执行。实际情况包括跨4到5个表的多个联接,可能包含4到5个and子句。然后,如果这些联接是规范化联接(一对多外键到主键),则取决于这些联接的性质最好在外键列上有索引,也可以在Where子句中涉及的字段上有索引,例如示例中的
from
列(顺便说一句,列的名称不好)。但一个表的索引计数必须保持平衡。其中太多可能会影响CRUD操作的性能。物理上,每个索引都是另一个表。所以祝你好运