一尘不染

MySQL性能-单个值的“ IN”子句与等于(=)

mysql

这是一个非常简单的问题,我假设答案是“没关系”,但无论如何我都必须问…

我有一个用PHP构建的通用sql语句:

$sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';

假设进行了先期有效性检查($object_ids一个数组至少包含1个项目且所有数值都是),我应该改为执行以下操作吗?

if(count($object_ids) == 1) {
    $sql = 'SELECT * FROM `users` WHERE `id` = ' . array_shift($object_ids);
} else {
    $sql = 'SELECT * FROM `users` WHERE `id` IN(' . implode(', ', $object_ids) . ')';
}

还是检查的开销count($object_ids)不值得在实际的sql语句中保存(如果有的话)?


阅读 1304

收藏
2020-05-17

共1个答案

一尘不染

两者在大范围内都不重要。与数据库通信的网络延迟将远远超过count($object_ids)开销或=vs IN开销。我将其称为过早优化的情况。

您应该对应用程序进行概要分析和负载测试,以了解真正的瓶颈在哪里。

2020-05-17