ホームページ データベース mysql チュートリアル mysqlのロックとインデックスの間の接続

mysqlのロックとインデックスの間の接続

Mar 17, 2018 am 10:33 AM
mysql 索引 接続する

通常、データベースを初めて使用する場合、ロックの効率性を考慮することはほとんどありませんが、データの量が増加するにつれて、同時実行性を防止するという目的のみを達成する必要があることがわかります。使用する必要のある SQL は非常に最適化されていますが、それでも非常に遅い場合があり、現時点では、それが mysql ロックによって引き起こされているかどうかを検討する必要があります。

まず、新しいデータテーブルを作成します:


ここで、主キーにはデフォルトでインデックスが付けられています


次に、テストのために 2 つのプロセスを開きます :


まず、インデックス ロックを含まない where 条件を追加します。


次に、2 番目のウィンドウでこの行のデータを更新すると、この操作がスタックすることがわかります



次に、トランザクションを送信すると、2 番目のウィンドウのデータがすぐに実行されることがわかります。

上記のことから、これで問題がないようです。ただし、同じロックを追加して、以下で実行したデータなどの他のデータの更新を試みることはできます:

上記の 3 つの状況はすべて同じプロセスを使用してテストされましたが、すべてスタックするため、問題が発生します。実際、name='test name' をロックする場合、id=133 と id=134 の 2 つの行のみをロックする必要がありますが、135、136、137 はロックしたくないのですが、これら 3 つの行にはアクセスできません。私たちのロックは 1 つのテーブル ロックであるため、ロックを使用するときにインデックスが使用される別の状況を試してみましょう:

上記のロックを使用するときにインデックスが使用されますが、データを更新するときにまだスタックします。インデックスは実際には役に立たないと感じますが、同じロックに遭遇してデータを更新するときにインデックスを使用すると、その効果がわかります:


これがロックによってスタックされていないことがわかります

以下 要約すると、ロックがインデックスを使用する場合は行ロック、インデックスを使用しない場合はテーブル ロックですが、操作するデータはロックを使用する必要があります。

なぜこれが当てはまるのかについて話しましょう:

まず第一に、インデックスがない場合、テーブルロックを形成するフルテーブルスキャンの形式でデータの選択または位置決めを実行することがわかります。インデックスがある場合は、指定された行が直接配置されます。つまり、行ロックが形成されますが、データを更新するときにインデックスを使用しない場合、ロックされた行がテーブル全体にスキャンされることに注意してください。スキャンするとロックされるため、望ましい効果は得られません


関連する推奨事項:

mysql ロック機構_MySQL

MySQL ロックの使用法テーブルレベルのロック

MySQL ロックを最適化する方法

以上がmysqlのロックとインデックスの間の接続の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPのビッグデータ構造処理スキル PHPのビッグデータ構造処理スキル May 08, 2024 am 10:24 AM

PHPのビッグデータ構造処理スキル

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか? Jun 03, 2024 pm 08:11 PM

PHP で MySQL クエリのパフォーマンスを最適化するにはどうすればよいですか?

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか? Jun 03, 2024 pm 12:19 PM

PHP で MySQL のバックアップと復元を使用するにはどうすればよいですか?

データベースにおける Java 列挙型のアプリケーション シナリオは何ですか? データベースにおける Java 列挙型のアプリケーション シナリオは何ですか? May 05, 2024 am 09:06 AM

データベースにおける Java 列挙型のアプリケーション シナリオは何ですか?

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか? Jun 02, 2024 pm 02:26 PM

PHP を使用して MySQL テーブルにデータを挿入するにはどうすればよいですか?

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法 Dec 09, 2024 am 11:42 AM

MySQL 8.4 で mysql_native_password がロードされていないエラーを修正する方法

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか? Jun 02, 2024 pm 02:13 PM

PHP で MySQL ストアド プロシージャを使用するにはどうすればよいですか?

PHP 配列ページングのパフォーマンス最適化戦略 PHP 配列ページングのパフォーマンス最適化戦略 May 02, 2024 am 09:27 AM

PHP 配列ページングのパフォーマンス最適化戦略

See all articles