2012-05-25 31 views
8

FALSE AND (expression)MySQL論理評価はJOIN節でレイジー/短絡ですか?

MySQLは式を評価するか、FALSEが表示されたらすぐに移動しますか?

私がやってクエリをスピードアップしたいcontext--いくつかの背景:それは起こった場合、私はこのクエリsee this answer

をやっている理由に常にnon_indexed_column_a=non_indexed_column_bを評価する上でのバックグラウンドについては

JOIN... ON (indexed_column1=indexed_column2 AND non_indexed_column_a=non_indexed_column_b)

それで時間が節約されることはありません。

+0

私はクエリオプティマイザは完全にこの些細な場合を排除すると思うだろう。ただし、静的に削除できない場合は、SQL Serverなどのエンジン(MySQLではなく、付与されています)**は評価票**を保証しません。これは実際にインデックスなどでより効率的になるのに役立ちます。 MySQL固有の実装がどのように機能するかを知ることは興味深いでしょう。 –

+0

私はいくつかの文脈を追加しました – babonk

+0

http://stackoverflow.com/questions/789231/is-the-sql-where-clause-short-circuit-evaluated(MySQLには特有ではありませんが、 less)、http://stackoverflow.com/questions/4449105/mysql-and-condition –

答えて

2

MySQLクエリオプティマイザは、可能な限りインデックスを使用し、可能な限り多くの行を排除するために最も限定的なインデックスを使用します。

クエリの場合、最初のインデックス列に基づいてレコードがフィルタリングされ、インデックス以外の列からレコードがフィルタリングされます。

また、クエリを実行する前に、MySQLは常に偽になるコード(Dead Code)を削除します。詳細については

は、以下を参照してください。http://www.informit.com/articles/article.aspx?p=377652&seqNum=2

関連する問題