7

次のステートメントが複数のレコードでどのように実行されるかを理解しようとしています。

SELECT * FROM test 
WHERE product='$product' 
AND (summary LIKE '%$keywords%' OR exp LIKE '%$keywords%')  
ORDER BY `$order_by` DESC;

私はSQLにかなり慣れていないので、知りたいことは次のとおりです。

1. SQL クエリを実行すると、テーブルの各行が参照されると思います。一致が見つかった場合、すべての結果が返されるまで一時的に結果をどこに保存しますか?

2.上記の例で、テーブル内の 1 つの行を見ていて、 に一致するものがあるとしsummaryます。OR exp LIKE '%$keywords%'すでに一致が見つかった場合、クエリは引き続き実行されますか?

4

2 に答える 2

2
  1. 一時的な結果を格納する方法を決定するのは、データベース エンジン次第です。各データベース エンジンの実装は異なる場合があります。クライアントが取得するのは、行で構成される結果セットです (クエリが結果を生成する場合)

  2. いいえ、OR の最初の条件が true と評価された場合、2 番目の条件はチェックされません (最終結果は既にわかっています)。

于 2013-03-19T01:15:26.983 に答える
1
  1. メモリ内 (DBMS によって異なります)。
  2. 一致が見つかった場合、おそらく続行されません。すべては特定の SQL 実装に依存しますが、一般的に一致を探し続けるのは効率的ではないため、おそらくそうではないと思います。
于 2013-03-19T01:16:32.467 に答える