37

MySQLのマニュアルによると:

大きなテーブルの場合、多くの場合、テーブルのロックは行のロックよりも優れています。

どうしてこれなの?より大きなテーブルをロックすると、より多くのデータがロックされるため、行レベルのロックの方が優れていると思います。

4

5 に答える 5

28

(編集前)リンクから

多くのロックを取得する必要があるため、テーブルの大部分で使用すると、ページ レベルまたはテーブル レベルのロックよりも遅くなります。

1 行または 2 行しかヒットしない場合は、行レベル ロックを使用します。コードが多くの行または不明な行にヒットする場合は、テーブル ロックを使用してください。

于 2010-08-11T20:47:05.247 に答える
19
  • 行のロックは、テーブルまたはページ レベルのロックよりも多くのメモリを必要とします。

  • 行ロックでより多くのロックを取得する必要があり、より多くのリソースを消費します

http://www.devshed.com/c/a/MySQL/MySQL-Optimization-part-2/から

  • 行レベルのロックの利点:

    • 多くのスレッドで異なる行にアクセスするときのロックの競合が少なくなります。
    • ロールバックの変更が少ない。
    • 1行を長時間ロックすることができます。
  • 行レベルのロックの欠点:

    • ページ レベルまたはテーブル レベルのロックより多くのメモリを必要とします。
    • テーブルの大部分で使用すると、より多くのロックを取得する必要があるため、ページ レベルまたはテーブル レベルのロックよりも遅くなります。
    • データの大部分に対して GROUP BY 操作を頻繁に行う場合、またはテーブル全体を頻繁にスキャンする必要がある場合は、他のロックよりもはるかに悪いです。
    • より高いレベルのロックを使用すると、ロックのオーバーヘッドが行レベルのロックよりも少ないため、アプリケーションを調整するためにさまざまな種類のロックをより簡単にサポートすることもできます。
  • 次の場合、テーブル ロックはページ レベルまたは行レベルのロックよりも優れています。

    • テーブルのほとんどのステートメントは読み取りです。
    • 単一のキー読み取りでフェッチできる行を更新または削除する、厳格なキーの読み取りと更新: UPDATE tbl_name SET column=value WHERE unique_key_col=key_value; DELETE FROM tbl_name WHERE unique_key_col=key_value;
    • 同時 INSERT ステートメントと組み合わせた SELECT と、UPDATE ステートメントと DELETE ステートメントはほとんどありません。
    • ライターなしで、テーブル全体に対する多数のスキャンまたは GROUP BY 操作。
于 2010-08-11T20:47:38.737 に答える
2

テーブル レベルのロックは、主要なデータ変更が行われている大きなテーブルに適しています。これにより、システムは、無数のロック (行ごとに 1 つ) を処理する必要がなくなり、テーブルの単一のロックと競合できます。

RDBMS は、ロック レベルを内部的に自動的にエスカレートします。

于 2010-08-11T20:46:08.417 に答える
1

テーブルのロックにより、多くのセッションがテーブルから同時に読み取ることができます

非常に高速なロック速度を実現するために、MySQL はテーブル ロックを使用します。

「行レベルのロックの方が優れていると思います」[ロックするデータが少ない]。

最初の「より良い」は、このページでは定義が不十分です。ベターは「より速い」という意味のようです。

ロックの競合のため、行レベルのロックは (一般に) 高速化できません。大規模な結果セットの各行をロックすると、別の大規模な結果セット クエリとの競合やロールバックが発生する可能性が非常に高くなります。

于 2010-08-11T20:52:17.873 に答える
0

一般に、大量のデータをロックする必要がある場合、大きなテーブルを 1 回ロックする方が、一連の行レベルまたはページ ロックを行うよりも安価です。

于 2010-08-11T20:46:31.287 に答える