1

我正在清理别人的代码。在通过生成非常复杂的 SQL 查询的非常复杂的系统时,我看到了 IN() WHERE 子句的很多用法:

SELECT * FROM table
 WHERE field1 IN( 1, 2, 3, 4, 5 )
   AND type IN( 1, 2, 3 )

... 等等。像这样组装一系列对性能更好吗field = 1 OR field = 2 OR...

SELECT * FROM table
 WHERE ( field1 = 1 OR field1 = 2 OR field1 = 3 OR field1 = 4 OR field1 = 5 )
   AND ( type = 1 OR type = 2 OR type = 3 )

还是使用 IN() 更好?即使是单个值,例如type IN(1)?

4

2 回答 2

3

答案因 MySQL 的版本而异。开发人员一直致力于在每个主要版本中改进优化器,因此在 MySQL 5.6 或更高版本中 OR 与 IN 的效率可能会大不相同。这也取决于我们在谈论多少个术语,以及索引选择性等。

最好的建议是使用您的真实数据在您安装的 MySQL 版本上对您的真实查询进行基准测试和分析。

于 2014-01-07T23:15:33.957 回答
0

更好地使用 IN 以提高可读性和维护性。性能将是相同的,如果不是更好的话。事实上,您可能会因为服务器不必解析荒谬的 or..or..or..or 废话列表而获得性能提升。请记住,服务器不只是运行 SQL,它必须解析它并理解它。对我们人类来说更具可读性对服务器来说也更具可读性,因此解析速度更快。

于 2014-01-07T23:07:47.267 回答