2016-07-13 14 views
0

特定の結果の行数を格納する別のテーブル(PKなし、1行のみ)があります。さて、このカウントは、この(単なる例)のように、クエリで使用されていますWhere-clause内のサブ選択は、複数回実行されるか、1回だけ実行されますか?

SELECT * FROM `car` 
WHERE `car`.`featured` = 1 
AND (SELECT `count` FROM `carfeaturedcounter`) > 5; 

SELECT count FROM carfeaturedcounter複数回(一回ごとの行のための)を実行し、または一度だけクエリごとにされますか?

+0

一度だけ実行されます。副問合せは効率的ではありませんが、非効率的ではありません。 – StormoPL

+0

@StormoPLええと、超効率的ではないと思っていましたが、毎回COUNT()を使用するよりも効率的であることを願っています。特に後でたくさんのエントリがあるときに役に立ちます:) – Katai

+0

DB構造この種の主題には、car_featuresをcar、GROUP BY car_idとCOUNT car_featuresに参加させている間は、HAVINGオプションを使用することになります。カウンターのためだけに別のテーブルを持っているのはちょっと違う。 – StormoPL

答えて

0

私はそれがMySQLのバージョンによって異なると思います。条件をfrom節に移動すると、1度だけ実行されます。

SELECT c.* 
FROM car c.CROSS JOIN 
    (SELECT `count` FROM carfeaturedcounter) x 
WHERE c.featured = 1 AND x.`count` > 5; 
関連する問題