【发布时间】:2014-01-25 20:28:42
【问题描述】:
我正在清理别人的代码。在通过生成非常复杂的 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)这样的单个值?
【问题讨论】:
-
检查
EXPLAIN两者。 “这会生成非常复杂的 SQL 查询”——您是否有信心实际更改它们? -
@zerkms:使用 EXPLAIN 没有任何区别。在 phpMyAdmin 中打开分析会产生截然不同的结果。