私の理解では、それは単純なはずです。colA='X'またはColB='X'を実行します。これらのいずれかが真の場合、結果を返します。それ以外の場合は返しません。
TableA
╔════╦═══╦═══╦═══╦═══╗
║ id ║ A ║ B ║ C ║ D ║
╠════╬═══╬═══╬═══╬═══╣
║ 1 ║ x ║ x ║ x ║ x ║
║ 2 ║ x ║ x ║ x ║ x ║
║ 3 ║ x ║ x ║ x ║ x ║
╚════╩═══╩═══╩═══╩═══╝
TableB
╔════╦═══╗
║ id ║ A ║
╠════╬═══╣
║ 1 ║ x ║
║ 2 ║ x ║
║ 3 ║ x ║
╚════╩═══╝
select T2.ID from tableA T1
JOIN TableB T2
ON T1.A=T2.A OR T1.B=T2.A OR T1.C=T2.A OR T1.D=T2.A /* **takes 6+ min** */
この単純な結合には6分以上かかります。1つのフィールドだけを使用して参加すると、かなり迅速になります。また、ORごとに1つずつ、合計4つの異なるクエリを記述し、その結果をユニオンすると、非常に高速になります。
私の質問は、SQL ORクエリはどのように機能するのですか?現在の行で機能しますか、すべてのORINGを実行して次の行に移動しますか、それとも各ORの2つのテーブルの完全なORを実行しますか。それでも、個別のクエリが十分に高速であるため、時間がかかるはずです。内部オプティマイザーはこれを非常に迅速に最適化できると思います。1つのテーブルの1つの列を2番目のテーブルの4つの列と比較しています。最適化するのは簡単なはずです。なんでこんなに時間がかかるの?このクエリを手動で最適化する方法はありますか?ところで、=を!=またはまたはANDに変更しようとしましたが、同じ時間がかかります。