我最适合使用两个查询中的哪一个查询?

时间:2019-07-10 04:19:22

标签: mysql performance

我有两个查询要完成工作

查询1:

SELECT * FROM table1 where id = 1
UNION ALL
SELECT * FROM table2 where id = 5
UNION ALL
SELECT * FROM table1 where id = 70
UNION ALL
SELECT * FROM table2 where id = 3
UNION ALL
SELECT * FROM table1 where id = 90

并查询2:

SELECT * FROM table1 where id IN (1,70,90)
UNION ALL
SELECT * FROM table2 where id IN (5,3)

这两个查询中哪个更快?

如果您的答案是第二个查询。

我在许多不同的地方使用了查询1。项目中的差异是否太大,以至于我将在各处替换第二个查询?

2 个答案:

答案 0 :(得分:2)

第二个版本更简洁,并且应该更快,因为它只需要实际执行两个查询,而第一个版本则对每个id值进行单独的查询。

假设id是两个表的主键,那么MySQL也许还可以使用聚簇索引来更快地查找匹配的记录。

答案 1 :(得分:0)

典型的计数是多少?总共5行? 2桌我预计性能差异将成为有利于第二(较短)公式的行/表的因素。在实验中,我得到了大约2倍。

因此,如果您有2个表中的100行,则第二个公式将明显更快;足够快,值得付出努力。

为什么?

  • 对于这种简单的查询,解析和优化占主导地位。
  • 对于较新版本的MySQL,两个查询的行数都相同。
  • 对于MySQL 5.7.3和更高版本,UNION ALL都不需要临时表。

输出行的顺序可能不同吗?