0

到目前为止,我已经将它与子选择一起使用,但一些研究告诉我使用子选择(尤其是在大表上)是不好的,因为它们的性能较低。

现在这就是我得到的:

SELECT COUNT( riddims.riddim ) AS rc, 
(
    SELECT COUNT( tunes.tune )
    FROM tunes
    WHERE tunes.tune NOT
    IN (
        ''
    )
) AS tc
FROM riddims
WHERE riddims.riddim NOT
IN (
    ''
)

这些表看起来像:

riddims:
riddim | genre | image

tunes:
riddim | artist | tune

我在玩'JOIN',但无法真正找出有效的查询。我需要的是类似于STACKOVERFLOW COUNT FROM MULTIPLE TABLES的东西,其性能比我上面的解决方案更高。

我的目标是执行显示以下输出的查询:

riddims | tunes | artist
100     | 400   | 2
  • 哪里没有谜语('')
  • WHERE 不调入('')
  • WHERE 艺术家 = '某位艺术家'

这就是我开始的方式,但它显然走错了方向:

SELECT COUNT(riddims.riddim) AS rc, COUNT(tunes.tune) AS tc FROM riddims LEFT JOIN tunes ON riddims.riddim = tunes.riddim
4

1 回答 1

1

您是否尝试这样做:

select riddims, tunes, artists
from (select count(*) as riddims from riddims where . . . ) r cross join
     (select count(*) as tunes from tunes where tunes not in  . . .) t cross join
     (select count(*) as artists from tunes where artist not in . . .) a

您的表似乎没有连接,至少对于这个查询。可能的性能问题是您的选择中的子查询每行都被调用一次。通过将它们放在 FROM 子句中,您可以消除这个可能的问题。

于 2012-09-12T02:39:41.683 回答