面接-mysqlインデックス

2652 ワード

1.まずは面接官に自己紹介させていただきます
2.履歴書に項目があるので、その項目を紹介させていただきます
3.データベースの設計と最適化に使用されるプロジェクトがあります.データベースにインデックスがありますか.データベースにはどのインデックスがありますか.インデックスの作成に適したフィールドはありますか?クラスタインデックスとは
mysqlにおけるInnoDBのインデックス:1次インデックス、2次インデックス(補助インデックス)
≪レベル1索引|Level Index|oem_src≫:クラスタリング索引(プライマリ・キー索引はクラスタリング索引を使用)クラスタリング索引はクラスタリング索引、クラスタリング索引、クラスタリング索引とも呼ばれます.
各InnoDBテーブルには、クラスタインデックス(クラスタインデックス、クラスタインデックス、クラスタセットインデックスとも呼ばれる)と呼ばれる特殊なインデックスがあります.テーブルにプライマリ・キーが定義されている場合、プライマリ・キー・インデックスはクラスタ・インデックスです.プライマリ・キーが定義されていない場合、MySQLは最初のユニーク・インデックス(unique)を取得し、非空のカラム(NOT NULL)のみをプライマリ・キーとして含み、InnoDBはクラスタ・インデックスとして使用します.このような列がなければ、InnoDBは6バイトのID値を生成し、クラスタインデックスとして非表示にします.テーブル内のクラスタリングインデックス(clustered index)は1級インデックスであり、それ以外のテーブル上の他の非クラスタリングインデックスは2級インデックスであり、補助インデックス(secondary indexes)とも呼ばれる.
二次索引(補助索引):一般索引、一意索引、組合せ索引(複合索引)、全文索引
二次インデックスは、単列インデックス、組合せインデックスに大きく分けることもできます.単一カラムインデックスには、通常のインデックス、一意のインデックスが含まれます.
通常インデックスmysql>ALTER TABLE`table_name` ADD INDEX index_name ( `column` )
キーKEYまたはINDEXによって定義されたインデックスの通常のインデックスの唯一のタスクは、データへのアクセスを高速化することです.したがって、クエリ条件(WHEREcolumn=)またはソート条件(ORDERBYcolumn)に最も頻繁に表示されるデータ列にのみインデックスを作成する必要があります.可能な限り、インデックスを作成するために、整数タイプのデータ列など、データが最も整然としていて、最もコンパクトなデータ列を選択する必要があります.
ユニークインデックスmysql>ALTER TABLE`table_name` ADD UNIQUE ( `column` )
通常のインデックスでは、インデックスされたデータ列に重複する値を含めることができます.たとえば、同じ名前が同じ名前になる可能性があるため、同じ「従業員個人情報」データテーブルに同じ名前が2回以上表示される可能性があります.
データ列が互いに異なる値のみを含むと判断できる場合は、そのデータ列にインデックスを作成するときにキーワードUNIQUEで一意のインデックスとして定義する必要があります.1つはMySQLのこのインデックスの管理を簡素化することであり、このインデックスもより効率的になります.二つ目はMySQLが新しいレコードがデータテーブルに挿入されたとき、新しいレコードのこのフィールドの値があるレコードのこのフィールドに現れたかどうかを自動的にチェックすることです.もしそうであれば、MySQLはその新しいレコードの挿入を拒否します.すなわち、一意のインデックスは、データレコードの一意性を保証することができる.実際、多くの場合、唯一のインデックスを作成する目的は、アクセス速度を向上させるためではなく、データの重複を避けるためであることが多い.
複合インデックスmysql>ALTER TABLE`table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
インデックスは、INDEX(columnA,columnB)インデックスのような複数のデータ列を上書きすることができる.このインデックスの特徴は、MySQLがこのようなインデックスを選択的に使用できることです.クエリー操作でcolumnAデータ列のインデックスを1つだけ使用する場合は、複合インデックスINDEX(columnA,columnB)を使用します.ただし、この使用法は、複合インデックスに前に並べられたデータ列の組合せにのみ適用されます.例えば、INDEX(A,B,C)は、Aまたは(A,B)のインデックスとして使用することができるが、B,Cまたは(B,C)のインデックスとして使用することはできない.
全文索引alter table`table_name` add   fulltext  ( `column` );
全文インデックスは、逆インデックスを確立することによって、ドキュメントを迅速にマッチングする方法です.5.6以降、InnoDBストレージエンジンは全文インデックスをサポートし始め、5.7以降はngramプラグインを使用して中国語をサポートし始めた.以前は英語のみがサポートされていましたが、スペースで分詞の区切り文字として使われていたため、中国語には不適切でした.
MySQLは3つのモードの全文検索モードをサポートする:自然言語モード(IN NATURAL LANGUAGE MODE)、ブールモード(IN BOOLEAN MODE)、クエリー拡張モード(WITH QUERY EXPANSION)