推奨 (無料): SQL
Zero、データベース ドライバー
- MySQL ドライバーは、最下位レベルでデータベースに接続するのに役立ちます。接続が確立されて初めて、その後の対話が可能になります。
1. データベース接続プール
- データベース接続プールには、Druid、C3P0、DBCP が含まれます
- 接続プールを使用すると、スレッドを常に作成および破棄することによるオーバーヘッドは、有名な「プーリング」のアイデアです。スレッド プールであっても、HTTP 接続プールであっても、その存在がわかります。
2. SQL インターフェイス
- MySQL でリクエストを処理するスレッドは、リクエストを取得した後に SQL ステートメントを取得し、それを処理のために SQL インターフェイスに渡します。
3. クエリ パーサー
- #SQL インターフェイスによって渡された SQL ステートメントを解析し、MySQL が理解できる言語に変換します。
4. MySQL クエリ オプティマイザー
- MySQL は、最小コスト原則 # に基づいて、対応するインデックスの使用を選択します。
コスト = IO コスト CPU コスト-
- IO コスト: つまり、ディスクからメモリにデータをロードするコストです。デフォルトでは、データ ページを読み取る IO コストは 1 です。 , MySQLはデータをページという形で読み込む、つまり、あるデータを利用する際に、そのデータだけでなく、そのデータに隣接するデータもメモリ上に読み込むという有名なプログラムです。局所性があるため、MySQL は毎回ページ全体を読み取り、1 ページのコストは 1 です。したがって、IO のコストは主にページのサイズに関係します
- CPU コスト: データをメモリに読み込んだ後、データが条件を満たしているかどうかを検出することも必要ですソートやその他の CPU 操作のコストは明らかに、行数に応じて、デフォルトでレコード検出のコストは 0.2 に関連します。
MySQL オプティマイザは、-
5 の実行コストが最小となる「IO コスト CPU」インデックスを計算します。ストレージ エンジン
#クエリ オプティマイザーは、ストレージ エンジン インターフェイスを呼び出して SQL を実行します。これは、実際の - SQL の実行がストレージ エンジン で完了することを意味します。
データはメモリまたはディスクに保存されます- SQL が実行されるたびに、そのデータはメモリにロードされます。このメモリは InnoDB の非常に重要なコンポーネントです。 :
- バッファ プール
##6. エグゼキュータ
エグゼキュータは最終的に一連の実行計画に従います ストレージ エンジン インターフェイスを呼び出して SQL の実行を完了します
7. バッファ プール
バッファ プール (バッファ プール) は、非常に重要なメモリ構造です。 InnoDB ストレージ エンジン。キャッシュの役割を果たします。
- バッファ プールとは、初めてクエリを実行するときにクエリ結果をバッファ プールに保存することを意味します。の場合、最初にバッファ プールからクエリが実行されます。検索がない場合は、ディスク上で検索されてから、バッファ プールに配置されます。
- バッファ プールで使用されるデータはロックされます。
-
8. 3 つのログ ファイル
1. Undo ログ ファイル
: 記録されたデータが変更される前外観
機能: UNDO ログ ファイルを使用してトランザクション ロールバックを完了します
2. REDO ログ ファイル
:変更されたデータの外観を記録します。
redo は、トランザクションが送信されたかどうかに関係なく、データ変更後の値を記録します。
- MySQL 効率を向上させるために、これらの操作は最初にメモリに配置されて完了し、更新されたデータは REDO ログ バッファに記録され、その後、特定の機会にディスクに永続化されます。
-
3. Bin log ログ ファイル:
操作プロセス全体を記録します
プロパティ |
redo ログ |
bin ログ |
ファイル サイズ |
REDO ログのサイズは固定です (設定で設定することもできます。通常はデフォルトで十分です) |
bin ログは、設定パラメータ を使用して # ごとに設定できます。 max_bin log_size ##bin logファイルのサイズ (ただし、通常は変更することはお勧めしません)。
|
実装方法 |
redo ログは、 InnoDB エンジン層によって実装されます (つまり、Innodb ストレージが原因で過剰なはい)
|
bin log は MySQL レイヤーによって実装されており、すべてのエンジンは bin loglog
|
を使用してRecord メソッド | redo ログレコードをループで書き込むメソッドで、最後まで書き込むと最初に戻ってループでログを書き込みます。 | bin ログは追加で記録されます。ファイル サイズが指定値より大きい場合、以降のログは新しいファイルに記録されます |
利用シナリオ |
redo ログクラッシュ リカバリに適しています (クラッシュ セーフ) (これは実際には Redis の永続化機能に非常に似ています)
|
bin ログマスター From に適していますレプリケーションとデータリカバリ
|
bin ログには操作記録全体が記録されます (これはマスター/スレーブレプリケーションにとって非常に重要です)
以上がSQL文の実行の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。