MySQL 5.5:使用IN(...)还是一系列EQUALS-AND更好?

时间:2014-01-07 23:00:14

标签: sql mysql-5.5

我正在清理别人的代码。在通过生成非常复杂的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)这样的单一值?

2 个答案:

答案 0 :(得分:3)

答案因MySQL版本而异。开发人员一直在努力改进每个主要版本的优化器,因此在MySQL 5.6或更高版本中,OR与IN的效率可能完全不同。它还取决于我们谈论的术语数量,索引选择性等等。

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

答案 1 :(得分:0)

最好使用IN进行可读性和维护。如果不是更好,性能将是相同的。事实上,你可能会通过服务器获得性能提升而不必解析一个荒谬的列表或者......或者......或者废话。记住服务器不只是运行SQL,它必须解析它并理解它。对我们来说更具可读性的人类对服务器的可读性也更高,因此解析得更快。