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 リディム NOT IN ('')
  • WHERE tunes NOT IN('')
  • 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

少なくともこのクエリでは、テーブルが接続されていないようです。考えられるパフォーマンスの問題は、select のサブクエリが行ごとに 1 回呼び出されることです。それらを FROM 句に入れることで、この問題を回避できます。

于 2012-09-12T02:39:41.683 に答える