我正在清理别人的代码。在通过生成非常复杂的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)
这样的单一值?
答案 0 :(得分:3)
答案因MySQL版本而异。开发人员一直在努力改进每个主要版本的优化器,因此在MySQL 5.6或更高版本中,OR与IN的效率可能完全不同。它还取决于我们谈论的术语数量,索引选择性等等。
最好的建议是使用您的真实数据在已安装的MySQL版本上对您的真实查询进行基准测试和分析。
答案 1 :(得分:0)
最好使用IN进行可读性和维护。如果不是更好,性能将是相同的。事实上,你可能会通过服务器获得性能提升而不必解析一个荒谬的列表或者......或者......或者废话。记住服务器不只是运行SQL,它必须解析它并理解它。对我们来说更具可读性的人类对服务器的可读性也更高,因此解析得更快。