gpt4 book ai didi

MySQL 作为子查询运行查询比普通查询更快

转载 作者:行者123 更新时间:2023-11-30 23:38:45 25 4
gpt4 key购买 nike

谁能告诉我为什么这种子查询方法比普通查询更快?据我所知,它们在理论上是相同的:S

SELECT
temp.`[thing]`,
FROM ( SELECT
`[thing]`
FROM
`[table]`
WHERE
[things] ) temp

快于:

SELECT 
`[thing]`
FROM
`[table]`
WHERE
`[things]`

子查询中的那个快了 5 倍多...

谁能告诉我我的配置中有什么会导致这样的问题?

干杯。

考虑到很多人没有理解我要重新表述的问题。查询做同样的事情。它们是相同的,但其中一个结果是从外部查询引用的,另一个只是普通的。

SELECT `name` FROM `members` WHERE `member_id` = 1

SELECT tmp.`name` FROM ( SELECT `name` FROM `members` WHERE `member_id` = 1 ) tmp

假设 member_id 是主键,是成员的唯一索引。

你想知道关于这个奇怪问题的任何其他信息,只需在评论中提问,我会提供。不只是给你我整个设置的转储,我不知道是什么导致了这个问题,因此缺乏一般信息,问题是“我的设置中的什么可能导致这个”。

自己动手,运行一个通用的 SELECT 语句,然后在子查询中再次运行它,看看它在您的系统上是否更快。

编辑:接受的答案并不是真正的答案,但这是我得到的唯一答案,所以我将关闭这个问题。

最佳答案

唯一合理的解释是缓存。不仅是 MySQL 缓存,还有像磁盘缓存这样的操作系统级缓存。即使您使用 SQL_NO_CACHE 缓存指令,这也只是意味着 MySQL 不会缓存该查询结果。 MySQL仍然会通过正常的缓存方式缓存索引和表。

您确实需要确保以清晰的方式缓存,然后反转您的查询,首先运行子选择。然后看看是否得到相同的结果。此外,您应该多次运行它们。您很可能会发现只有第一个查询“慢”。

关于MySQL 作为子查询运行查询比普通查询更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5250942/

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