目次
MySQL における MyISAM と InnoDB の違い: " >MySQL における MyISAM と InnoDB の違い:
##選択方法: " > ##選択方法:
ホームページ データベース mysql チュートリアル mysqlのMyISAMとInnoDBの違いは何ですか

mysqlのMyISAMとInnoDBの違いは何ですか

Nov 08, 2022 pm 07:42 PM
mysql

相違点: 1. InnoDB はトランザクションをサポートしますが、MyISAM はサポートしません; 2. InnoDB は外部キーをサポートしますが、MyISAM はサポートしません; 3. InnoDB はクラスター化インデックスですが、MyISAM は非クラスター化インデックスですインデックス; 4. Innodb はフルテキスト インデックスをサポートしませんが、MyISAM はフルテキスト インデックスをサポートします; 5. InnoDB はテーブルおよび行レベルのロックをサポートしますが、MyISAM はテーブル レベルのロックをサポートします; 6. InnoDB テーブルには一意のインデックスが必要ですが、 Myisam には必要ありません; 7. 保存ファイルが異なります。

mysqlのMyISAMとInnoDBの違いは何ですか

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

InnoDB: MySQL のデフォルトのトランザクション エンジンは、最も重要で広く使用されているストレージ エンジンでもあります。多数の短期トランザクションを扱うように設計されており、ほとんどの場合、短期トランザクションは正常に送信され、ロールバックされることはほとんどありません。 InnoDB のパフォーマンスと自動クラッシュ回復機能により、非トランザクション ストレージのニーズに人気があります。別のストレージ エンジンを使用する特別な理由がない限り、InnoDB エンジンを優先する必要があります。

MyISAM: MySQL 5.1 以前のバージョンでは、MyISAM がデフォルトのエンジンです。 MyISAM は、フルテキスト インデックス作成、圧縮、空間関数 (GIS) などを含む多数の機能を提供しますが、MyISAM はトランザクションと行レベルのロックをサポートしておらず、疑いのない欠陥は、トランザクション後に安全に回復できないことです。クラッシュ。

MySQL における MyISAM と InnoDB の違い:

1. InnoDB はトランザクションをサポートしますが、MyISAM はサポートしません。 InnoDB のステートメント デフォルトでは、言語はトランザクションにカプセル化され、自動的に送信されますが、速度に影響するため、トランザクションを形成するには、begin と commit の間に複数の SQL 言語を入れるのが最善です。 ##2. InnoDB は外部キーをサポートしますが、MyISAM はサポートしません。外部キーを含む InnoDB テーブルを MYISAM に変換すると失敗します;

3. InnoDB はインデックス構造として B ツリーを使用するクラスター化インデックスであり、データ ファイルは (プライマリ(テーブル データ ファイル自体は B ツリーによって編成されたインデックス構造です)、両方とも主キーが必要であり、主キーを使用したインデックス作成は非常に効率的です。ただし、補助インデックスには 2 つのクエリが必要です。最初に主キーをクエリし、次に主キーを介してデータをクエリします。したがって、主キーが大きすぎると、他のインデックスも大きくなるため、主キーは大きすぎないでください。

MyISAM は非クラスター化インデックスであり、インデックス構造として B ツリーも使用します。インデックスとデータ ファイルは分離されており、インデックスにはデータ ファイルのポインタが保存されます。 。主キーインデックスと副キーインデックスは独立しています。

つまり、InnoDB の B ツリー主キー インデックスのリーフ ノードはデータ ファイルであり、補助インデックスのリーフ ノードは主キーの値ですが、MyISAM のリーフ ノードはデータ ファイルです。 B ツリー主キー インデックスと補助インデックスは両方ともデータ ファイルのアドレス ポインタです。

mysqlのMyISAMとInnoDBの違いは何ですか

mysqlのMyISAMとInnoDBの違いは何ですか4. InnoDB はテーブル内の特定の行数を保存せず、実行時にテーブル全体が必要です。テーブルスキャンからカウント(*)を選択します。 MyISAM は変数を使用してテーブル全体の行数を保存します。上記のステートメントを実行するときは、変数を読み取るだけで済み、非常に高速です (WHERE 条件を追加できないことに注意してください);

それではなぜですか? InnoDB にこの変数がない場合はどうなるでしょうか?

InnoDB のトランザクション特性により、同じタイム テーブル内の行数はトランザクションごとに異なります。そのため、カウント統計では、Store ではなく、現在のトランザクションでカウントできる行数が計算されます。クイッククエリの合計行数。 InnoDB は、オプティマイザが別のインデックスの使用を要求しない限り、可能な限り最小のインデックスを走査しようとします。セカンダリ インデックスが存在しない場合、InnoDB は他のクラスター化インデックスも走査しようとします。

InnoDB によって維持されるバッファ (バッファ プール) にインデックスが完全に存在しない場合、カウント操作にはさらに時間がかかります。合計行数を記録するテーブルを作成し、INSERT/DELETE 中にプログラムで対応するデータを更新させることができます。上で述べた問題と同様、現時点で複数のトランザクションがある場合、この解決策はあまり役に立ちません。おおよその行値でニーズを満たすのに十分な場合は、SHOW TABLE STATUS



5 を試してください。Innodb はフルテキスト インデックス作成をサポートしていませんが、MyISAM はフルテキスト インデックス作成をサポートしています。フルテキスト インデックス作成の分野におけるクエリ効率の観点から、MyISAM はますます高速になっています。追記: InnoDB 5.7 以降ではフルテキスト インデックス作成がサポートされています

6. MyISAM テーブルはクエリ操作のために圧縮できます。

#7. InnoDB はテーブルおよび行 (デフォルト) レベルのロックをサポートしますが、MyISAM はテーブル レベルのロックをサポートします

InnoDB の行ロックは、物理的な行レコードをロックするのではなく、インデックスに実装されます。サブテキストは、アクセスがインデックスにヒットせず、行ロックが使用できない場合、テーブル ロックに縮退するということです。

例:

t_user(uid, uname, age, sex) innodb;
 
    uid PK
    无其他索引
    update t_user set age=10 where uid=1;             命中索引,行锁。
 
    update t_user set age=10 where uid != 1;           未命中索引,表锁。
 
    update t_user set age=10 where name='chackca';    无索引,表锁。
ログイン後にコピー

8. InnoDB テーブルには一意のインデックス (主キーなど) が必要です (ユーザーが指定しない場合、ユーザーは/デフォルトの主キーとして機能する非表示の列 Row_id を生成します). そして Myisam はそれを持つことができません

9. Innodb ストレージ ファイルには frm と ibd が含まれますが、Myisam は frm、MYD、 MYI

Innodb: frm はテーブル定義ファイル、ibd はデータ ファイルです。

Myisam: frm はテーブル定義ファイル、myd はデータ ファイル、myi はインデックス ファイルです。

##選択方法:

1. トランザクションをサポートしますか?そうであれば、innodb を選択してください。そうでない場合は、MyISAM を検討してください。

2. ほとんどのテーブルが読み取りクエリのみである場合は、MyISAM を検討してください。読み取りとクエリの両方がある場合は、MyISAM を検討してください。書き込みを行う場合は、InnoDB を使用してください。

3. システムがクラッシュした後、MyISAM が回復するのはさらに困難になりますが、許容できますか?

4. Innodb は、 MySQL 5.5 バージョン以降にリリースされました。MySQL のデフォルト エンジン (以前の MyISAM) になったことで、その利点は誰の目にも明らかです。何を使用すればよいかわからない場合は、InnoDB を使用してください。少なくとも悪くはありません。

InnoDB が主キーとして自動インクリメント ID を使用することを推奨するのはなぜですか?

回答: ID の自動インクリメントにより、B インデックスが挿入されるたびに右から展開されるようになり、B ツリーや頻繁なマージと分割を回避できます ( UUID を使用する場合と比較して)。文字列主キーとランダム主キーを使用すると、データがランダムに挿入されるため、効率が悪くなります。

#innodb エンジンの 4 つの主な機能## バッファーの挿入、二重書き込み、適応型ハッシュ インデックス (ahi)、読み取り先へ (先を読む)

[関連する推奨事項: mysql ビデオ チュートリアル

]

以上がmysqlのMyISAMとInnoDBの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

MySQL:初心者向けのデータ管理の容易さ MySQL:初心者向けのデータ管理の容易さ Apr 09, 2025 am 12:07 AM

MySQLは、インストールが簡単で、強力で管理しやすいため、初心者に適しています。 1.さまざまなオペレーティングシステムに適した、単純なインストールと構成。 2。データベースとテーブルの作成、挿入、クエリ、更新、削除などの基本操作をサポートします。 3.参加オペレーションやサブクエリなどの高度な機能を提供します。 4.インデックス、クエリの最適化、テーブルパーティション化により、パフォーマンスを改善できます。 5。データのセキュリティと一貫性を確保するために、バックアップ、リカバリ、セキュリティ対策をサポートします。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

Navicatプレミアムの作成方法 Navicatプレミアムの作成方法 Apr 09, 2025 am 07:09 AM

NAVICATプレミアムを使用してデータベースを作成します。データベースサーバーに接続し、接続パラメーターを入力します。サーバーを右クリックして、[データベースの作成]を選択します。新しいデータベースの名前と指定された文字セットと照合を入力します。新しいデータベースに接続し、オブジェクトブラウザにテーブルを作成します。テーブルを右クリックして、データを挿入してデータを挿入します。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

NavicatでMySQLへの新しい接続を作成する方法 NavicatでMySQLへの新しい接続を作成する方法 Apr 09, 2025 am 07:21 AM

手順に従って、NAVICATで新しいMySQL接続を作成できます。アプリケーションを開き、新しい接続(CTRL N)を選択します。接続タイプとして「mysql」を選択します。ホスト名/IPアドレス、ポート、ユーザー名、およびパスワードを入力します。 (オプション)Advanced Optionsを構成します。接続を保存して、接続名を入力します。

SQLが行を削除した後にデータを回復する方法 SQLが行を削除した後にデータを回復する方法 Apr 09, 2025 pm 12:21 PM

データベースから直接削除された行を直接回復することは、バックアップまたはトランザクションロールバックメカニズムがない限り、通常不可能です。キーポイント:トランザクションロールバック:トランザクションがデータの回復にコミットする前にロールバックを実行します。バックアップ:データベースの定期的なバックアップを使用して、データをすばやく復元できます。データベーススナップショット:データベースの読み取り専用コピーを作成し、データが誤って削除された後にデータを復元できます。削除ステートメントを使用して注意してください:誤って削除されないように条件を慎重に確認してください。 WHERE句を使用します:削除するデータを明示的に指定します。テスト環境を使用:削除操作を実行する前にテストします。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

See all articles