in、or与union all的性能对比
对于某大表的查询
使用or:
SELECT * FROM article
WHERE article_category=2
OR article_category=3
// 执行时间:11.0777
使用 in:
SELECT * FROM article
WHERE article_category IN (2,3)
// 执行时间:11.2850
使用union all:
SELECT * FROM article
WHERE article_category=2
UNION ALL
SELECT * FROM article
WHERE article_category=3
// 执行时间:0.0261
总之,性能上union all的方式完胜,但是网上说并不总是这样,目前尚未发现对索引列或非索引列这样查询时的例外情况,希望大家参与讨论
UNION, UNION ALL的简单分析:
UNION, UNION ALL 指令的目的是将两个 SQL语句的结果合并起来。从这个角度来看, UNION 跟 JOIN 有些类似,因为这两个指令都可以由多个表格中撷取资料。UNION和 UNION ALL 不同之处在于前者会过滤掉相同的数据而后者会将符合条件的数据都列出来,无论数据值有无重复。
UNION 的语法如下:
[SQL 语句 1] UNION [SQL语句 2]
UNION ALL 的语法如下:
[SQL 语句 1] UNION ALL [SQL语句 2]
值得注意的是UNION, UNION ALL的一个限制是两个 SQL 语句所产生的栏位需要是同样的数据种类。