InnoDBのテーブル構造
InnoDBはインデックス組織テーブルであり,この構造の格納はプライマリ・キーの順序に従って組織される.InnoDBでは、テーブルごとにプライマリ・キーが必要です.InnoDBがない場合は、自分でプライマリ・キーを特定または追加します.
InnoDBのプライマリ・キー・インデックスは集計インデックスとも呼ばれ、コアのインデックスであり、集計インデックスはB+ツリー構造を採用し、各インデックス・アイテムにはrowデータが含まれている.つまり、インデックスによって具体的なrowデータを定義することができ、二次IOを必要としない.
インデックス組織テーブルのプライマリ・キーの決定
プライマリ・キーはインデックス組織テーブルのコアであり、テーブル・データはプライマリ・キー順に格納され、InnoDBのプライマリ・キー決定プロセスは以下の通りである.のほとんどのテーブルには、指定(すでに要求されている)が表示され、自己増加タイプとして指定されています. 指定されていない場合、null以外のuniqueインデックスがあるかどうかを検索し、ある場合、columnはprimary keyである. not null unique indexが複数見つかった場合、indexの定義順序がtableの定義順序ではない最初の順序が使用されます. 一致しない場合、6バイトサイズのポインタがプライマリ・キーとして自動的に作成されます.rowId;
構成
InnoDBは、表領域、セグメント、領域、ページ、行に基づいてデータを整理します.1つの表領域には、データ・セグメント、インデックス・セグメントなどの異なるタイプのデータを格納する複数のセグメントが含まれます.各セグメントは複数の領域で構成され、各領域には複数のページがあり、ページはメモリプールの基本管理単位であり、インデックスの基本単位でもあり、各ページには複数の行が含まれ、行はデータとコアである.表空間:tablespaceはデータのトップクラスの組織と格納領域であり、各種情報、データ、インデックス、トランザクション情報などを格納している. セグメント:segmentはデータセグメント、インデックスセグメント、ロールバックセグメントに分けることができ、データセグメントはB+ツリーのリーフノードであり、インデックスセグメントはB+ツリーの非リーフノードである. 区:extent区の大きさは1 M固定する; ページ:pageデフォルト16 KB、1ゾーン64 page、 行:row InnoDBのデータはrowで格納され(hiveよりcolumnで格納され、両者の相違を招く)、1ページあたり最大79992行格納されます.
Varcharフィールドとcharフィールド
InnoDBデータ行の格納フォーマットの特徴により、InnoDBでサポートされているVarcharは最大65535バイトであるが、他のメタ情報を格納する必要があるため、実際にはvarcharは最大65532バイトであり、65535はすべてのvarcharフィールドの合計であり、合計がこのサイズを超えるとtextまたはblobを使用する必要があり、一部のsqlレベルではinnoDBが自動的に変換される.
また、1ページあたりのデータに2 rowデータが格納されないと、行オーバーフローが発生し、データオーバーフローがディスクIOを大きくするため、varcharフィールドの全長は8098を超えないようにします.
varcharが長すぎると、InnoDBの作成時にtextまたはblobで置き換えられますが、text、blobはポインタのように格納され、ディスクIOも大きくなり、効率が低下します.
charフィールドの単位は文字であり、表象的には固定長であるが、格納時も別のvarcharであり、varcharの単位はバイトであり、区別に注意しなければならない.すなわちchar(2)は異なる文字セットの下でabと「我々」は同じように格納される.
拘束
制約はデータベースの重要な特徴であり、InnoDBでは次のような制約がサポートされています.タイプ制約:intタイプがstringを格納できないなど、適切なデータ型を使用します. 一意の制約:primary keyまたはunique indexを定義します. 外部キー制約:foregin keyを定義します. enumおよびset制約; トリガまたはdefalutを使用してデフォルト値を制約します.
制約の作成方法: private key; unique key; foregin key; not null; defalut;
SQL文
PS :
制約を作成すると同時に、基本的にはインデックスを作成することに等しいが、インデックスは物理的、性能的な最適化に偏っており、制約は論理的、ビジネス的な完全性である.
*制約は必ずしもエラーを報告するものではありません.sql_を設定します.modeはstrict_trans_tables;*
*テーブルごとに最大6つのトリガ*を作成します.
MyISAMは外部キーとトランザクションをサポートしていません.
パーティション
InnoDBとMyISAM、NDBはパーティション化をサポートしていますが、一部のストレージエンジンではサポートされていません.パーティション化操作はプログラムパーティションによく見られ、データベースは水平パーティションのみをサポートし、垂直パーティションはサポートされません.
垂直分割:columnに従って分割し、ホットスポットフィールドを分割します.
mysqlはローカルパーティションのみをサポートします.つまり、データ、インデックスが一緒にあり、グローバルパーティションはサポートされません.グローバルパーティションは要求され、データは分離されますが、インデックスは分離されません.
InnoDBのプライマリ・キー・インデックスは集計インデックスとも呼ばれ、コアのインデックスであり、集計インデックスはB+ツリー構造を採用し、各インデックス・アイテムにはrowデータが含まれている.つまり、インデックスによって具体的なrowデータを定義することができ、二次IOを必要としない.
インデックス組織テーブルのプライマリ・キーの決定
プライマリ・キーはインデックス組織テーブルのコアであり、テーブル・データはプライマリ・キー順に格納され、InnoDBのプライマリ・キー決定プロセスは以下の通りである.
構成
InnoDBは、表領域、セグメント、領域、ページ、行に基づいてデータを整理します.1つの表領域には、データ・セグメント、インデックス・セグメントなどの異なるタイプのデータを格納する複数のセグメントが含まれます.各セグメントは複数の領域で構成され、各領域には複数のページがあり、ページはメモリプールの基本管理単位であり、インデックスの基本単位でもあり、各ページには複数の行が含まれ、行はデータとコアである.
Varcharフィールドとcharフィールド
InnoDBデータ行の格納フォーマットの特徴により、InnoDBでサポートされているVarcharは最大65535バイトであるが、他のメタ情報を格納する必要があるため、実際にはvarcharは最大65532バイトであり、65535はすべてのvarcharフィールドの合計であり、合計がこのサイズを超えるとtextまたはblobを使用する必要があり、一部のsqlレベルではinnoDBが自動的に変換される.
また、1ページあたりのデータに2 rowデータが格納されないと、行オーバーフローが発生し、データオーバーフローがディスクIOを大きくするため、varcharフィールドの全長は8098を超えないようにします.
varcharが長すぎると、InnoDBの作成時にtextまたはblobで置き換えられますが、text、blobはポインタのように格納され、ディスクIOも大きくなり、効率が低下します.
charフィールドの単位は文字であり、表象的には固定長であるが、格納時も別のvarcharであり、varcharの単位はバイトであり、区別に注意しなければならない.すなわちchar(2)は異なる文字セットの下でabと「我々」は同じように格納される.
拘束
制約はデータベースの重要な特徴であり、InnoDBでは次のような制約がサポートされています.
制約の作成方法:
SQL文
create table xx (
aa int defalut 1,
bb varchar(800) not null,
'sex' enum('1','0'),#
uniquey key(bb) ,
primary key (aa)
)engine = innodb;
alert table xx add unique key idx_xx(aa);
crete index idx_xx on xx (aa);
create unique index idx_xx on xx (aa);
# trigger
create trigger tr_aa {before|after insert|update|delete}
on xx for each row BEGIN
....
END
PS :
制約を作成すると同時に、基本的にはインデックスを作成することに等しいが、インデックスは物理的、性能的な最適化に偏っており、制約は論理的、ビジネス的な完全性である.
*制約は必ずしもエラーを報告するものではありません.sql_を設定します.modeはstrict_trans_tables;*
*テーブルごとに最大6つのトリガ*を作成します.
MyISAMは外部キーとトランザクションをサポートしていません.
パーティション
InnoDBとMyISAM、NDBはパーティション化をサポートしていますが、一部のストレージエンジンではサポートされていません.パーティション化操作はプログラムパーティションによく見られ、データベースは水平パーティションのみをサポートし、垂直パーティションはサポートされません.
垂直分割:columnに従って分割し、ホットスポットフィールドを分割します.
mysqlはローカルパーティションのみをサポートします.つまり、データ、インデックスが一緒にあり、グローバルパーティションはサポートされません.グローバルパーティションは要求され、データは分離されますが、インデックスは分離されません.