Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 这两个查询中,我使用哪一个对性能最好?_Mysql_Performance - Fatal编程技术网

Mysql 这两个查询中,我使用哪一个对性能最好?

Mysql 这两个查询中,我使用哪一个对性能最好?,mysql,performance,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 tab

我有两个问题要做

问题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。在这个项目中,差异是如此之大,以至于我会用第二个查询替换everywhere?

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


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

典型的计数是多少?总共5行?两张桌子?我认为性能差异是行/表支持第二个(较短)公式的一个因素。在实验中,我得到了大约2倍

因此,如果您有两个表中的100行,那么第二个公式将大大加快速度;速度足够快,值得付出努力

为什么?

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

输出行的顺序可能不同,这有关系吗?

我在许多不同的地方使用过查询1。在该项目中,差异是否如此之大,以至于我会用第二个查询替换everywhere?执行一些不必要的联合不会降低数据库性能,但最佳做法是重构,假设您能够做到这一点。Tim Biegeleisen感谢您的描述,为什么您不执行两个查询并检查哪一个更快?@emix因为我希望在概念上进行探索,而不是在特定的时间进行探索,但这通常取决于您的表架构和其中的数据量。数据库设置也会影响此设置、数据库版本、使用的引擎。有很多因素。因此,我们无法告诉您数据库优化器将如何执行。看看Tim是如何回答的:“应该”、“假设”、“可能”。@emix我使用inodb引擎,id是pk,平均表有300000行。下一次只需在真实数据集上运行查询,并检查并解释优化器做出了哪些决策。