私はこれについて基本的に理解していると思いますが、データベースのパフォーマンスについてもっと学ぶことに興味があるので、誰かが私に詳細を教えてくれることを願っています。特定の接続で遅いMySQLクエリは、他の接続にいつ影響しますか?
私は非常に大きなデータベースを持ち、何百万ものエントリがあり、データベースは多くの接続をサポートしています。あまりにも多くのデータがあるので、データベース上で単純なクエリを実行するのは遅くなります。特定の接続のクエリが他の接続で実行されているクエリのパフォーマンスに直接影響を与える時期を正確に理解しようとしています。
1つの接続でいくつかの要素がロックされると、それらの要素を必要とする他の接続を実行するクエリが保持されることがわかります。たとえば、次のようにします。
SELECT FOR UPDATE
あなたが選択しているものがロックされます。
SELECT COUNT(*) FROM myTable
は、私たちが、カウントを実行している十億行はいくつかの時間(InnoDBの上で実行されている)を取るために起こっているとテーブルを持って言うことができます:あなたはのような単純な何かをするとどうなり
。他の接続で実行されているクエリに影響しますか?他のクエリのロックは何も参加したん
SELECT * FROM myTable1 JOIN myTable2 ON myTable1.id = myTable2.id;
:何SELECT使用して大量のデータを選択し、同様に、JOINの場合
?
他の接続で実行されているクエリのパフォーマンスにどのようなクエリが直接影響を与えるかはわかりません。
おかげ
ありがとう、それは物事のハードウェアの側面をはるかに明確に理解する。しかし、最初の角度からは、特定のクエリがロックを引き起こすかどうかを確信できるかどうかを正しく理解していません。 – sungiant
更新も削除もしない場合、ロックはありません(CASCADEまたはTRIGGERS副作用)トランザクション内の指定された行、または明示的な設定はLOCK mysqlコマンドを使用して自分自身をロックします。単純なSELECTは決して行をロックしません。また、私が覚えている限り、テーブル全体を非常に簡単にロックするMYISAMエンジンの世話をしてください! – Sebas
はい、MyISAMは更新/削除時にテーブルレベルのロックを行います。 InnoDBロックは、where句が一意または主キーを使用する場合は行レベルのロックを行い、それ以外の場合はブロックレベルのロックまたはテーブルロックを行います。 –