【发布时间】:2013-11-18 11:44:04
【问题描述】:
我正在尝试优化查询,尽量避免重复使用“COMPLEX QUERY”指示的查询,该查询使用了 2 次,并且两次都具有相同的结果。
原始查询
SELECT news.*
FROM news
INNER JOIN((SELECT myposter
FROM (SELECT **COMPLEX QUERY**))
UNION
(SELECT myposter
FROM `profiles_old` prof2
WHERE prof2.profile_id NOT IN (SELECT **COMPLEX QUERY**))) r
ON news.profile = r.p
我想知道这样的事情是否可能:
SELECT news.*
FROM (SELECT **COMPLEX QUERY**) complexQuery,
news
INNER JOIN ((SELECT myposter
FROM complexquery)
UNION
(SELECT myposter
FROM `profiles_old` prof2
WHERE prof2. profile NOT IN (SELECT myposter
FROM complexQuery))) r
ON news. profile = r.p
Mysql 会对该类型的查询进行某种缓存吗?
【问题讨论】:
-
嗯,我想看看,但我想我需要实际的子查询来判断什么是最好的解决方案。
-
另外,如果您提供表结构和查询的 EXPLAIN 结果将会很有用。
-
问题不是如何实现复杂查询,而是如何重用它的值:在第一部分中,我从复杂查询中获取所有用户,在第二部分中,我尝试获取我之前没有获取的所有用户,来自一个旧表,其中还包含无法从 复杂查询 中检索到的值
标签: mysql sql performance database-performance query-performance