谁能告诉我为什么此子查询方法比普通查询更快?据我所知,它们在理论上是相同的:
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语句,然后在子查询中再次运行它,看看它在系统上是否更快。
编辑:接受的答案并不是真正的答案,但这是我得到的唯一答案,所以我将结束这个问题。
发布于 2011-03-10 19:18:26
唯一合理的解释是缓存。不仅仅是MySQL缓存,还有像磁盘缓存这样的操作系统级缓存。即使使用SQL_NO_CACHE缓存指令,这也意味着MySQL不会缓存查询结果。MySQL仍将通过常规缓存方法缓存索引和表。
您确实需要确保清除缓存,然后反向查询,首先运行子选择。然后看看你是否得到了同样的结果。此外,您应该多次运行这两个程序。很可能你会发现只有第一个查询是“慢”的。
发布于 2011-03-10 05:44:50
是拼写错误还是在子选择中对表进行预筛选?
WHERE语句中的[things]与[thing]
https://stackoverflow.com/questions/5250942
复制相似问题