gpt4 book ai didi

mysql - 速度选择与加入

转载 作者:行者123 更新时间:2023-11-30 22:51:44 26 4
gpt4 key购买 nike

下面的两个查询做同样的事情。基本上显示表 1 的所有 ID,它们出现在表 2 中。令我困惑的是 simple select way wayJOIN 快,我原以为 JOIN 会慢一点,但不会慢那么多......5 秒对 0.2

谁能详细说明一下?

SELECT table1.id FROM       
table1,table2 WHERE
table1.id=table2.id

持续时间/获取 0.295/0.028(MySql Workbench 5.2.47)

SELECT table1.id
FROM table1
INNER JOIN table2
ON table1.id=table2.id

持续时间/获取 5.035/0.027(MySql Workbench 5.2.47)

最佳答案

问:谁能详细说明一下?

答: 在我们走@a_horse_with_no_name 似乎迫不及待要追赶的“MySQL 中的错误”路线之前,我们真的需要确保这是可重复的行为,而不仅仅是一个怪癖。

要做到这一点,我们确实需要从多次运行的查询中查看耗时结果。

如果在服务器上启用了查询缓存,我们希望在添加了SQL_NO_CACHE 提示的情况下运行查询(SELECT SQL_NO_CACHE table1.id ...),因此我们知道我们不会检索缓存的结果。

我会重复执行每个查询至少三次,然后抛出第一次运行的结果,并对其他运行进行平均。 (这样做的目的是消除表数据不在缓存中的影响,无论是 InnoDB 缓冲区还是文件系统缓存。)

此外,为每个查询运行一个 EXPLAIN SELECT ...。并比较访问计划。

如果这些表中的任何一个是 MyISAM 存储引擎,请注意 MyISAM 表受 DML 操作锁定;当在表上运行 INSERT、UPDATE 或 DELETE 操作时,SELECT 语句将被阻止访问该表。 (但是 5 秒似乎有点长,除非这些表真的很大,或者 DML 语句效率很低)。

使用 InnoDB,SELECT 查询不会被 DML 操作阻塞。

耗时也将取决于系统上发生的其他事情。

但是总耗用时间将不仅仅包括 MySQL 服务器中的时间。暂时打开 MySQL general_log 将允许您捕获服务器实际正在处理的语句。

关于mysql - 速度选择与加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27988857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com