我有两个查询要完成工作
查询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。项目中的差异是否太大,以至于我将在各处替换第二个查询?
答案 0 :(得分:2)
第二个版本更简洁,并且应该更快,因为它只需要实际执行两个查询,而第一个版本则对每个id
值进行单独的查询。
假设id
是两个表的主键,那么MySQL也许还可以使用聚簇索引来更快地查找匹配的记录。
答案 1 :(得分:0)
典型的计数是多少?总共5行? 2桌我预计性能差异将成为有利于第二(较短)公式的行/表的因素。在实验中,我得到了大约2倍。
因此,如果您有2个表中的100行,则第二个公式将明显更快;足够快,值得付出努力。
为什么?
UNION ALL
都不需要临时表。输出行的顺序可能不同吗?