6

この記述は真か偽か

これらのクエリのパフォーマンス

SELECT * FROM table;

UPDATE table SET field = 1;

SELECT COUNT(*) FROM table;

同一である

それとも、一方の性能が他方の性能と大きく異なる場合はありますか?

アップデート

  1. SELECT と UPDATE の間に大きな違いがある場合は、もっと興味があります。必要に応じて COUNT(*) を無視できます
  2. select がフル テーブル スキャンを実行するとします。更新は、テーブル内のすべての行に対しても更新を実行します。
  3. 更新で 1 つのフィールドのみが更新されると仮定しますが、すべての行が更新されます (これはインデックス付きフィールドです)。
  4. 私は彼らが異なる時間を要し、異なることをすることを知っています. 私が知りたいのは、違いが重要かどうかです。例えば。更新が選択よりも 5 倍長くかかる場合、それは重要です。これをしきい値として使用します。そして、正確である必要はありません。近似値を与えるだけです。
4

5 に答える 5

7

「パフォーマンス」とは、「実行にかかる時間」のことですか?

  • そのうちの 1 つは、すべての行のすべてのデータを返します。
  • それらの1つ(「FROM」を削除した場合)は、行にデータを書き込んでいます。
  • 1 つは、行をカウントし、行内のデータを何も返さないことです。

これら 3 つのクエリはすべて、まったく異なることを行っています。したがって、3 つすべてが完了するまでにかかる時間が異なると結論付けるのが妥当です。

最も重要なのは、なぜこの質問をするのですか? 何を解決しようとしていますか? これを尋ねることで、あなたが間違った道を進んでいるという悪い予感がします。

于 2013-10-10T21:39:58.793 に答える
2

私は職場で大きな (許可されたインデックス付き) テーブルを持っています。これが私が見つけたものです

select * from X (最初の 100,000 レコードに限定) (12.5 秒)

select count(*) from X (何百万ものレコードが返されました) (15.57 秒)

インデックス付きテーブルの更新は非常に高速です (1 秒未満)

于 2013-10-10T21:40:40.303 に答える
1

SELECT と UPDATE はほぼ同じである必要があります (ただし、データベースによって異なる場合があります)。COUNT(*) は、あるレベルで多くのデータベースにキャッシュされるため、クエリは簡単に O(1) になる可能性があります。もちろん、UPDATE の遅延実装も O(1) になる可能性がありますが、現在それを行っている人を私は知りません。

tl;dr: 「偽」または「場合による」。

于 2013-10-10T21:38:13.867 に答える
1

3 つのクエリはすべて、まったく異なることを行います。

それぞれに独自のパフォーマンス特性があり、直接比較することはできません。

何を調査しようとしているのかを明確にできますか?

于 2013-10-10T21:39:37.570 に答える