首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将查询作为子查询运行的MySQL速度比普通查询快

将查询作为子查询运行的MySQL速度比普通查询快
EN

Stack Overflow用户
提问于 2011-03-10 03:13:45
回答 2查看 418关注 0票数 1

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

代码语言:javascript
复制
SELECT
    temp.`[thing]`,
FROM ( SELECT 
    `[thing]`
FROM 
    `[table]`  
WHERE 
    [things] ) temp

比:

代码语言:javascript
复制
SELECT 
    `[thing]`
FROM 
    `[table]`  
WHERE 
    `[things]`

子查询中的那个要快5倍以上……

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

干杯。

考虑到相当多的人没有理解这个问题,我要换个说法。查询也做同样的事情。它们是相同的,但在一个中,结果是从外部查询中引用的,而另一个则是普通的。

代码语言:javascript
复制
SELECT `name` FROM `members` WHERE `member_id` = 1

代码语言:javascript
复制
SELECT tmp.`name` FROM ( SELECT `name` FROM `members` WHERE `member_id` = 1 ) tmp

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

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

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-10 19:18:26

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

您确实需要确保清除缓存,然后反向查询,首先运行子选择。然后看看你是否得到了同样的结果。此外,您应该多次运行这两个程序。很可能你会发现只有第一个查询是“慢”的。

票数 0
EN

Stack Overflow用户

发布于 2011-03-10 05:44:50

是拼写错误还是在子选择中对表进行预筛选?

WHERE语句中的[things][thing]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5250942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档