使用简单包装器,Mysql 查询花费的时间多出 300 倍

标签 mysql subquery

查询 1:这是原始查询

select SQL_NO_CACHE twitter_id, ANY_VALUE(city), ANY_VALUE(screen_name) 
FROM twitter_discovery_search_results 
GROUP BY twitter_id

0.0051 seconds

查询 2:与上面相同的查询,只是包装为子查询

SELECT SQL_NO_CACHE d.* FROM 
(
    select  twitter_id, ANY_VALUE(city), ANY_VALUE(screen_name) 
    FROM twitter_discovery_search_results
    GROUP BY twitter_id
) as d

1.8321 Seconds

我无法理解为什么第二个查询比原始查询花费的时间多 350 倍?

最佳答案

MySQL很可能会创建一个临时表来存储派生表的结果,然后从派生表中选择所有值。如果派生表足够大,MySQL 会将其内容写入磁盘,从而显着减慢查询速度。

关于使用简单包装器,Mysql 查询花费的时间多出 300 倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912906/

相关文章:

php - 使用 GROUP BY 和 ORDER BY 子句按降序打印记录

MYSQL 带连接的子查询

mysql - 使用子选择的MySQL查询需要使用联接或存在

php - 如何从php文件中的数据库查询中获取数组数据到ajax成功数据

Python - MySQLdb - 更新行导致 TypeError : not enough arguments for format string

java - 什么情况下我们需要在数据库中使用组合键

php - 如何将表单从 iFrame 发布到父级

mysql - ALTER TABLE 附加子查询中的 ENUM 值

postgresql ALL 子查询将空计算为 true

MySQL Case 语句,在 'Statement List' 中返回多行(Then...之后的部分)