首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >许多在子查询上留下的联接,需要一些方法来提高性能。

许多在子查询上留下的联接,需要一些方法来提高性能。
EN

Stack Overflow用户
提问于 2015-04-21 18:13:58
回答 2查看 41关注 0票数 1

下面是我的查询的一个例子。我最多有10个这样的联接/子查询--基本上都是相同的格式,但是有不同的联接和where子句。

代码语言:javascript
复制
SELECT DISTINCT mytable.label, tableA.counter, tableB.counter
FROM mytable
LEFT JOIN 
    (SELECT COUNT(id) as counter, label
        FROM mytable
        ...joins...
        ...where...
        GROUP BY label) tableA 
    ON tableA.label=mytable.label
LEFT JOIN
    (SELECT COUNT(id) as counter, label
        FROM mytable
        ...joins...
        ...where...
        GROUP BY label) tableB 
    ON tableB.label=mytable.label
...

它大约需要2-4秒,这是一个高流量页面,所以这种速度是不够好的。有人能在这里推荐一种提高性能的方法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-21 18:20:03

这里不需要GROUP,因为您只返回1个值。尝试这样的子查询方法:

代码语言:javascript
复制
SELECT DISTINCT T.label,
  (SELECT COUNT(id) as counter FROM tableA A WHERE A.blah = T.blah) as AValue,
  (SELECT COUNT(id) as counter FROM tableB B WHERE B.blah = T.blah) as BValue
FROM mytable T
票数 2
EN

Stack Overflow用户

发布于 2015-04-21 20:02:10

除了Jon的解决方案之外,我还会使用友联市枢轴表共享另一个解决方案。

代码语言:javascript
复制
SELECT [A], [B]
FROM (
    SELECT 'A' AS TableName, COUNT(id) as counter
    FROM tableA 
    UNION ALL
    SELECT 'B' AS TableName, COUNT(id) as counter
    FROM tableB
) AS DT
PIVOT(SUM(counter) FOR TableName IN([A], [B])) AS PVT
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29780049

复制
相关文章

相似问题

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