-2

私は1つのmysqldbクエリのパフォーマンス改善タスクに取り組んでおり、「where句が1=1」である1つのクエリの下に直面しました。

私の質問は、2データベース未満のクエリの実行時間のパフォーマンスの点で何が違うのかということです

  1. Select * from Table1 where 1=1

  2. Select * from Table1

レコード数:1つのクライアントのtable1の159954

レコード数:2番目のクライアントのtable1の2452798。

場合によっては、このテーブルは同じwhere句を持つ別のテーブルと結合されます1=1

mysqlクエリコンパイラは実行中にこのクエリを最適化できますか?

MySQLサーバー5.1のバージョン

4

4 に答える 4

1

どちらもすべてのレコードを取得するため、大きな違いはありません。ここ1 = 1は常に真です。

1)Select * from Table1 where 1=1  

2)Select * from Table1 

同じトピックに関するこの他の投稿を参照してください

MySQL クエリにおける WHERE 1 の重要性

「1=1」ステートメント

于 2012-06-04T12:40:35.440 に答える
1

2 つのクエリは同じ行セットを返し、実行時間は同じになります。

よく使われる理由1=1は、コンピューターで生成されたwhere句を生成するプロセスを簡素化するためです。おもちゃではないすべての RDBMS エンジンのオプティマイザーは、この条件を として無視しますtrue1=1生成されたクエリがどのように役立つかについては、Stack Overflow を検索してください。

于 2012-06-04T12:41:41.713 に答える
0

クエリの前に Explain を配置するか、クエリ プロファイラーをオンにするとわかります。1=1 は非常に小さなオーバーヘッドであり、ほとんど目立たないと思います。

于 2012-06-04T12:40:07.343 に答える
0

コンピューター アーキテクチャを研究した人なら、WHERE 1 = 1 を WHERE true に変更すると計算量が減るという点で、誰もが同意すると思います。レジスターへの関与が少なくなり、コンパイラーが 1 = 1 をより小さな計算にトークン化する必要がなくなります。

したがって、クエリを作成していて、簡単にするために最初の条件が必要な場合、クエリは次のようになります。

SELECT * FROM userWHERE true AND UserID = 1

本当に、ここでは非常に小さな計算について話しているのです。このスタック オーバーフローの質問を投稿するだけで、必要な計算量を節約できる可能性は低いです。

于 2012-06-10T02:05:36.390 に答える