0

これに対する明確な答えと、決定的でない私のテストが見つかりません:

定数と等しい (または別の関係にある) 結合のテーブルに列がある場合、条件を ON にした方が速いですか? それとも最後にどこで?

例:

    SELECT * FROM `" . BLABLA . "` as `s`
    JOIN `" . BLABLABLA . "` AS `sDet` ON (`sDet`.`a` > '" . $R['a'] . "'
        AND '" . $R['b'] . "' BETWEEN `sDet`.`c` AND `sDet`.`d`
        AND `s`.`id` = `sDet`.`idDet`
    )
    WHERE `s`.`f` = 'whatever'

または

    SELECT * FROM `" . BLABLA . "` as `s`
    JOIN `" . BLABLABLA . "` AS `sDet` ON (`s`.`id` = `sDet`.`idDet`)
    WHERE `s`.`f` = 'whatever'
        AND '" . $R['b'] . "' BETWEEN `sDet`.`c` AND `sDet`.`d`
        AND `s`.`id` = `sDet`.`idDet`

最初のバージョンの方が速いはずだと思っていましたが、よくわかりません。何かご意見は?

4

1 に答える 1

0

何が速いかはよくわかりませんが、where 句と on 句の間で条件が常に交換可能であるとは限らないことに注意してください。

内部結合
INNER JOIN の場合、それらは交換可能です

外部結合
OUTER JOIN の場合、それらは必ずしも交換可能ではありません。結合のどちら側に条件が依存するかによって異なります

于 2013-05-23T10:05:25.117 に答える