ホームページ >データベース >mysql チュートリアル >Mysqlデータベースに関する知識のまとめ

Mysqlデータベースに関する知識のまとめ

巴扎黑
巴扎黑オリジナル
2017-06-26 09:12:481234ブラウズ

2017年6月8日、天気は曇りでした。気分は晴れています。

昨夜は、長い間連絡を取っていなかった中学校の同級生の夢を見て、朝の通勤中に話しました。少女は現在、美しい景色が広がる貴州省に出張中だ。私は「あなたは今とても豊かな生活を送っていますね」と言いました。女の子は「それはあなたが私の潤っていない部分を見ていないからです」と言った。実際、人生において、私たちは常に自分の明るい面を他人に見せ、虐げられた面を「隠し」ます。

昨日、ブロガーがブログで私に質問をし、私を「偉大な神」とさえ呼んだので、私はこの「偉大な神」とは程遠いことをよく知っていたので、とてもパニックになりました。 「偉大な神」という目標に向かって私の努力と努力を続けます。

ブロガーの質問は、データ エンジンデータ テーブルの修復と最適化 ステートメントを含む MySQL データベースに関するものですが、私はこれらの問題をこれまで考慮したことがなく、ましてや使用したこともありませんでした。そこで、それを理解するためにいくつかの情報を検索したので、見つけた情報を次のように要約します。

1. Mysql データベース ストレージ エンジン

コンセプト:

ストレージ エンジンは、実際にはデータを保存する方法、保存されたデータにインデックスを付ける方法、データを更新する方法、データをクエリする方法、およびその他の技術的な実装方法です。 MySQL のデータは、さまざまな異なるテクノロジを使用してファイル (またはメモリ) に格納されます。これらのテクノロジはそれぞれ、異なるストレージ メカニズム、インデックス作成手法、ロック レベルを使用し、最終的には幅広いさまざまな機能と機能を提供します。 MySQL では、これらのさまざまなテクノロジとサポートされる関連機能をストレージ エンジンと呼びます。

(1) innoDB ストレージ エンジン

①innodb ストレージ エンジンの mysql テーブルは、トランザクション、ロールバック、システム クラッシュ修復機能と、マルチバージョン同時実行制御のトランザクション セキュリティを提供します。

②innodb は自動インクリメント列 (auto_increment) をサポートしています。自動インクリメント列の値が空である場合、既存の値よりも大きい場合はどうすればよいでしょうか。現在の値を保存するだけです。

③innodbストレージエンジンは外部キーをサポートしています。外部キーが配置されているテーブルは子テーブル(またはスレーブテーブル)と呼ばれ、それが依存するテーブルは親テーブル(またはメインテーブル)と呼ばれます。

④innodb ストレージ エンジンで最も重要なことは、トランザクションとトランザクション関連の機能をサポートしていることです。

⑤innodbストレージエンジンはmvcc行レベルロックをサポートします。

⑥innodbストレージエンジンインデックスはB+Treeを使用します。

(2) MyISAM ストレージ エンジン

1) MyISAM このストレージ エンジンはトランザクションをサポートせず、行レベルのロックをサポートせず、同時挿入されたテーブル ロックのみをサポートします。主に高負荷の選択に使用されます。

2) MyISAM タイプ テーブルは、静的、動的、圧縮の 3 つの異なるストレージ構造をサポートします。

静的型: は、定義されたテーブル列のサイズが固定されていることを意味します (つまり、xblob、xtext、varchar などの可変長データ型が含まれていない)。そのため、mysql は自動的に静的な myisam 形式。

静的形式を使用したテーブルのパフォーマンスは、メンテナンス中やアクセス中に所定の形式でデータを保存するために必要なオーバーヘッドが非常に低いため、比較的高くなります。ただし、この高いパフォーマンスはスペースと引き換えに得られます。スペースは定義時に固定されるため、列内の値がどんなに大きくても、最大値が優先してスペース全体を占有します。

動的タイプ: 列が (列が 1 つしかない場合でも) 動的 (xblob、xtext、varchar およびその他のデータ型) として定義されている場合、myisam は自動的に動的タイプを使用します。

動的テーブルは静的テーブルよりも占有するスペースが少なくなりますが、フィールドの内容が変更されるとその位置を移動する必要が生じ、断片化が発生する可能性が高いため、パフォーマンスが低下します。データの変更が増えると断片化が増加し、それに応じてデータ アクセスのパフォーマンスが低下します。フラグメントによるデータ アクセスを減らすには、2 つの解決策があります:

A. 可能な限り静的データ型を使用します。

b. テーブルの最適化ステートメントを頻繁に使用し、テーブルの更新と削除によって失われた領域を回復します。

ストレージ エンジンがテーブルの最適化をサポートしていない場合は、データをダンプして再ロードすることができ、これにより断片化を軽減することもできます。

圧縮タイプ:

このデータベースで作成されたテーブルがライフサイクル全体を通じて読み取り専用である場合、この場合、占有スペースを削減するために myisam の圧縮テーブルが使用されます。 3) MyISAM も B+tree インデックスを使用しますが、具体的な実装は Innodb とは少し異なります。

(3) メモリストレージエンジン

①メモリ ストレージ エンジンは、これまでのストレージ エンジンとは少し異なり、メモリに保存されたデータを使用してテーブルを作成し、すべてのデータもメモリに保存されます。

②メモリストレージエンジンに基づく各テーブルは、実際にはディスクファイルに対応しており、ファイル名とファイルのテーブル名は同じで、タイプは.frmです。このファイルにはテーブルの構造のみが保存され、そのデータ ファイルはメモリに保存されるため、データの高速処理が容易になり、テーブル全体の処理能力が向上します。

③メモリストレージエンジンはデフォルトでハッシュ(HASH)インデックスを使用します。これはB+Treeを使用するよりも高速です。読者がB-treeを使用したい場合は、作成時にそれを参照できます。

④メモリストレージエンジンのファイルデータはメモリに保存されており、mysqldプロセスで例外が発生した場合、マシンを再起動またはシャットダウンするとデータが消えます。したがって、メモリ ストレージ エンジン内のテーブルのライフ サイクルは非常に短く、通常は 1 回しか使用されません。

(4) BlackHole ストレージ エンジン (ブラック ホール エンジン)

トランザクションと mvcc 行レベルのロックをサポートします。このストレージ エンジンは、主にログ記録または同期アーカイブに使用されます。

2. MySQL でのテーブルの最適化と修復

mysql を長期的に使用すると、最適化中にテーブルを修復することで、占有されるディスク領域を削減し、バックアップを容易にすることができます。

REPAIR TABLE `table_name` テーブルを修復します OPTIMIZE TABLE `table_name` テーブルを最適化します

REPAIR TABLE - 破損したテーブルを修復するために使用されます。
OPTIMIZE TABLE—アイドル状態のデータベース領域を再利用するために使用されるテーブルを最適化します。テーブル上のデータ行が削除されても、占有されていたディスク領域はすぐには再利用されず、OPTIMIZE TABLE コマンドを使用すると、領域が再利用され、ディスク上のデータ行が再配置されます。

注: これはデータベースではなくディスク上にあります。
ほとんどの場合、OPTIMIZE TABLE を実行する必要はありません。データ行をバッチで削除した後、データ テーブルの最適化操作を定期的に (週に 1 回または月に 1 回) 実行するだけで済みます。テーブル。

以上がMysqlデータベースに関する知識のまとめの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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