mysqlの概念理解(上)

3919 ワード

これはmysqlデータベースを設計するときのいくつかの小さな結び目です.主にMYISAMとINNODBの2つのエンジンについて簡単に紹介し、表のいくつかの属性について詳しく紹介します.MyISAM:MyISAMは、MySQLのISAM拡張フォーマットとデフォルトのデータベースエンジンです.MyISAMはまた、複数の同時読み書き操作を最適化するために、OPTIMIZE TABLEコマンドを頻繁に実行し、更新メカニズムに浪費された空間を復元する必要があるテーブルロックメカニズムを使用しています.MyISAMには、データベースファイルを修復するためのMyISAMCHKツールや、無駄なスペースを復元するためのMyISAMPACKツールなど、いくつかの有用な拡張機能があります.MYISAMは高速読み取り操作を強調し、InnoDB:この技術はMYSQL++APIである.MYSQLを使用する場合、あなたが直面しているすべての課題は、ISAMとMyISAMデータベースエンジンがトランザクション(transaction process)をサポートせず、外部キーもサポートしていないことに由来します.ISAMエンジンとMyISAMエンジンよりはるかに遅いが、InnoDBにはトランザクションと外部キーのサポートが含まれており、これらの2つのエンジンにはない.データテーブルにフィールドを追加し、このフィールドが持つ属性は、(phpmyadminフィールドの表示と解釈)名前(field):フィールドがデータテーブルに直接表示される名前(フィールド名)タイプ(type):よく使われるタイプint(整数型、一般的に携帯電話番号、学号、平台の番号、または自増のidを格納するために使用される)varcharとcharです.(文字列型の長さは0-255の間で、前者の空間は自由に変動することができ、後者の空間はいったん長さを設定すると変動しないが、前者のインデックス効率は相対的に悪くなり、小型開発では影響は大きくない)、text(テキストタイプの長さ0-65535)の長さ(length):異なるタイプは異なる長さに対応し、例えば、tinyint(0-255の値しか取れない)の適切な長さでデータ記憶空間を節約できる場合(データ量が少ない場合、実は意味が大きくなく、現在のデータベースは大きい)整理(CHARSET=utf 8):このデータテーブルの文字セットは、create test()CHARSET=utf 8で使用され、現在一般的にデフォルトの符号化フォーマットはutf 8 gbkで文字化の問題が発生しやすい.変換が必要なデフォルト(DEFAULT):(デフォルトは、データベースを追加したときに値がない場合に表示される値)データ型:binary(binary属性はcharとvarcharの値のみに使用されます.この属性を列に指定すると、大文字と小文字を区別するようにソートされます.これに対してbinary属性を無視すると、大文字と小文字を区別しないようにソートされます)unsigned属性は、整数型のみに適用されます(この具体的なタイプはC言語と同じです)空かどうか:一般的にはnot null(一般的にはNOT NULLとNULLの2種類が主です)auto_increment(自己増加タイプ、最も一般的なのはユーザー登録時、ID値が自動的に増加する)データ制約:(主に5種類の制約checkの制約mysqlが一時的にサポートされていない)primary key(プライマリ・キー制約=非空制約+一意性制約)foreign key(外部キー制約、増加フォーマット:alter tableテーブルadd constraint外部キー制約名foreign key(列)referencesテーブル(プライマリ・キー列);)NOT NULL(NULL以外の制約)UNIQUE CHECK(検証制約、mysqlは一時的にサポートされていません)コメント(comment):(このテーブルの用途の一般的な説明)例:
  CREATE TABLE `wp_action` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '  ',
  `name` char(30) NOT NULL DEFAULT '' COMMENT '      ',
  `title` char(80) NOT NULL DEFAULT '' COMMENT '    ',
  `remark` char(140) NOT NULL DEFAULT '' COMMENT '    ',
  `rule` text COMMENT '    ',
  `log` text COMMENT '    ',
  `type` tinyint(2) unsigned NOT NULL DEFAULT '1' COMMENT '  ',
  `status` tinyint(2) NOT NULL DEFAULT '0' COMMENT '  ',
  `update_time` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '    ',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COMMENT='     '

以下、MYSQLでよく使われる概念についてまとめます.インデックスはクラスタリングインデックスと非クラスタリングインデックスの2種類に分けられ、クラスタリングインデックスではなくデータが格納されている物理的な位置によって順序が異なります.クラスタリングインデックスは、クラスタリングインデックスではなく、複数のローの取得速度を向上させることができます.(InnoDBはプライマリ・キーに従って集約するが、プライマリ・キーが定義されていない場合、InnoDBは一意の非空インデックスを使用して代用しようとする.このインデックスがない場合、InnoDBは非表示のプライマリ・キーを定義して上に集約する.したがって、集約インデックスの場合、プライマリ・キーを作成すると、自動的にプライマリ・キーの集約インデックスが作成される.通常のインデックスは非集約インデックスである).インデックスを設計するいくつかの理論:一.カラムにNULL値が含まれていてもインデックスに含まれない限り、複合インデックスにNULL値が含まれているカラムが1つある限り、この複合インデックスには無効です.したがって、データベース設計時にフィールドのデフォルト値をNULLにしないでください.二.一般的にlike操作は奨励されませんが、使用しなければならない場合は、どのように使用するかも問題です.like「%aaa%」はインデックスを使用しませんが、like「aaa%」はインデックスを使用できます.三.MySQLクエリは1つのインデックスのみを使用するため、where句でインデックスが使用されている場合、order byのカラムはインデックスを使用しません.したがって、データベースのデフォルトのソートが要求に合致する場合は、ソート操作を使用しないでください.複数のカラムのソートはできるだけ含まないでください.必要に応じて、これらのカラムに複合インデックスを作成したほうがいいです.四.インデックスを作成する目的はクエリーを助けることであり、検索が使えない場合はインデックスを作成する必要はありません.また、データテーブルが大きすぎる(5 w以上)場合は、インデックスとして適切でないフィールド(文字型の長さが(40)を超えるフィールドもあります.また、テーブルが常に更新する必要がある場合はインデックス3にも適していません.インデックス(INDEX):INDEX(これは最も基本的なインデックスであり、MyIASMでデフォルトのBTREEタイプのインデックスであり、多くの場合に使用されるインデックスでもあります.)UNIQUE(通常のインデックスと同様に、インデックス列の値は一意でなければなりませんが、NULL値を許可します(プライマリ・キーとは異なります).結合インデックスの場合、カラム値の組合せは一意である必要があり、作成方法は通常のインデックスと類似している)ps:1.インデックスはクエリの速度を大幅に向上させますが、INSERT、UPDATE、DELETEなどのテーブルの更新速度を低下させます.テーブルを更新するとき、MySQLはデータだけでなくインデックスファイルも保存します.二.インデックスを作成すると、ディスク領域を占有するインデックスファイルが作成されます.一般的にこの問題はそれほど深刻ではありませんが、大きなテーブルに複数の組合せインデックスを作成すると、インデックスファイルの膨張が速くなります.