MySQLの基礎概念はどのくらい知っています

4210 ワード

MySQLの基本概念に関する名詞は多いです.例えば、3つのパターン、4つの隔離境界、ACID、DQL、DML、DDL、そしてredo、undo、binlogなどです.本文はMySQLでよく見られる基本概念を統一的に整理し、仲間たちが閲覧しやすいようにします.
MySQLに関する名詞の概念はまだ多いですが、よく使われるものも少ないので、よく使われる統計を整理して、振り返るのに便利です.
  • DQL:data query language、SELECTクエリー文を指す.
  • DML:data manipulation language、SELECT、UPDATE、INSERT、DELETEの4種類のデータ操作文を指す.
  • DDL:data definition language、データ定義文、作成/修正/削除テーブル構造、主にCREATE、ALTER、DROPなどがある.
  • MDLロック:Metadata Locking、ここでmetalockはデータベースおよびテーブルの構造情報を指す.MySQLでは、DDLはトランザクションの範疇ではなく、トランザクションとDDLが並行して実行され、操作に関連するテーブルが操作されると、思わぬ問題が発生したり、トランザクションの特性が破壊されたり、binlogの順序が乱れたりするなど、これらの問題を解決するためにMDLロックメカニズムが導入されます.

  • 3つのパターン
  • 第1のパターン:各フィールドは原子であり、再分解できないという.
  • 第2のパターン:プライマリ・キーがあり、非プライマリ・キーフィールドはプライマリ・キーフィールドに依存する.
  • 第3のパターン:非プライマリ・キー間では相互に依存できない.

  • 注意、3つのパターンはデータテーブルの提案設計原則であり、これに完全に従って設計する必要はなく、具体的な設計は実際のシーンに基づいて分析しなければならない.任意の与えられたデータには、通常、完全なパターン化と逆パターン化、および両方の折衷の様々な表現方法がある.正規化データベースでは、どのデータも1回しか表示されず、逆正規化では冗長です.
    ACID
    ACIDはトランザクションの4つの特性であり,それぞれ原子性,一貫性,分離性,持続性である.
  • A:atomicity、原子性、1つのトランザクションは分割できない最小作業ユニットと見なされなければならない.トランザクション全体のすべての操作はすべてコミットに成功するか、すべて失敗してロールバックするか.
  • C:consistency、コンシステンシ、データベースは常に1つのコンシステンシの状態から別のコンシステンシの状態に変換されます.
  • I:isolation、独立性、通常、1つの事務所が行った修正は、最終的にコミットされる前に、他のトランザクションには表示されません(独立性レベルは、コミットされていない読み取り時に満たされません).
  • D:トランザクションがコミットされると、その変更はデータベースに永続的に保存されます.

  • 独立性レベル
    データベース・トランザクションの4つの独立性レベル:
  • コミットされていません:あるトランザクションは、別のトランザクションがコミットされていないデータを読み取ることができます.
  • コミット:トランザクションがデータを更新する間、トランザクションがコミットされていない場合、他のトランザクションはデータを読めません.
  • 繰り返し可能:このレベルは、同じトランザクションで同じレコードを複数回読み出す結果が同じであることを保証し、「コミット・リード」で再読み取り不可の問題を解決します.しかし、理論的には幻読問題を解決することはできない(ギャップロックによって幻読問題を解決することができる).
  • シリアル化:すべてのトランザクションをシリアル化し、最も高いレベルの独立性レベルです.

  • ファンタジー問題
    幻読みとは、トランザクションが範囲データを読み出すと、別のトランザクションがその範囲に新しいデータを挿入し、前のトランザクションが再び範囲データを読み出すと幻行が生成されます.幻読が発生したのは、以前のトランザクションがデータの読み出し範囲に範囲ロック(range-locks)を追加しなかったためであり、つまり、読み出し時にロックされた行レベルの共有ロックのみであり、クエリー区間またはテーブル全体をロックしなかったためである.
    一般的なインデックス構造
  • B+ツリーインデックス:B+ツリーはリレーショナル・データベースで一般的なインデックス・タイプです.注意:B+ツリーは、特定のキー値の行を見つけることができません.検索されたデータ行があるページしか見つかりません.その後、データベースはページをメモリに読み込み、メモリで検索し、最後に検索するデータを得ることができます.
  • ハッシュインデックス:InnoDBがサポートするハッシュインデックスは適応的で、1つのテーブルに介入するためにハッシュインデックスを生成することはできません.innodbはテーブルの使用状況に応じて自動的にハッシュインデックスを生成します.
  • 全文インデックス:InnoDBは全文インデックスをサポートしていますが、各テーブルには全文検索のインデックスが1つしかなく、一般的には逆インデックス技術を使用して実現されます.

  • 集計インデックスと非集計インデックス
    集約インデックスはプライマリ・キー・インデックスであり、リーフ・ノードは記録されたデータ(ページ)です.非集約インデックスは補助インデックスとも呼ばれ、その葉のノードはプライマリ・キー値を記録します.表tを例に以下のように説明する.
    create table T (
    ID int primary key,
    k int NOT NULL DEFAULT 0,
    s varchar(16) NOT NULL DEFAULT '',
    index k(k)) engine=InnoDB;
    
    insert into T values(100,1, 'aa'),(200,2,'bb'),(300,3,'cc'),(500,5,'ee'),(600,6,'ff');
    

    表Tに対応するプライマリ・キー索引とセカンダリ索引は以下の通りである.
     
    いくつかのログ
  • redo log:ページの物理操作を記録し、InnoDBはトランザクション操作を先にredo logを書くことで、データページの更新をディスクに書くのではなく、ディスクをランダムに書く(dataファイル)ことを順番に書く(redo log)ことに相当し、その後MySQLの「空き」の時にディスクを遅く書くことで、サーバーの性能を高める.
  • undo log:undo logトランザクションが発生する前のデータのバージョンを保存し、ロールバックに使用できます.また、マルチバージョン同時制御リード(MVCC)、すなわち非ロックリードを提供できます.undo logは論理ログであり、undoを実行するときにデータを物理ページから操作するのではなく、トランザクションの前の状態に論理的に復元するだけであり、redo logとは異なります.トランザクションの開始時に現在のバージョンがundo logを生成し、undoもundo logの信頼性を保証するためにredoを生成します.
  • binlog:binlogはmysqlレベルのアーカイブログであり、プライマリ・レプリケーションおよびデータベース・ポイント・ベースのリストアに使用できます.binlogは論理ログを記録し、DDLとDMLの操作ログを記録し、実行されたトランザクションの更新sql文と簡単に考えることができます.
  • スロークエリー、エラーログなど.

  • いくつかのファイル
  • .ibdファイルと.ibdataファイル:.ibdファイルとibdataファイルはいずれもinnodbデータを格納するファイルであり、そのすべては2つあります.innodbは共有テーブルスペースを使用するか、共有テーブルスペースを使用するかを決定する構成をサポートしているからです.表領域の使用を独り占めする」.ibd」ファイルにはデータが格納、各テーブルに1つずつ存在する.ibdファイル;共有テーブルスペースを使用する場合はibdataファイルが使用され、すべてのテーブルに共通のibdataファイル(または複数の構成)が使用されます.
  • .ifmファイル:テーブル関連メタデータ情報を格納します.

  • 原文住所:https://mp.weixin.qq.com/s?__biz=MzIwNTI2ODY5OA==&mid=2649938420&idx=1&sn=dfc0bedd7f0e59b41511bfe492f5d45c&chksm=8f350a41b84283577e87cf4fde1470babcb837a5352f21fb422959129d211bd0eaf21f29f795&token=1297190316&lang=zh_CN#rd