sql >> データベース >  >> RDS >> Mysql

MySQLのINDEX、PRIMARY、UNIQUE、FULLTEXTの違いは?

    違い

    • キー またはINDEX 通常の非一意のインデックスを指します。インデックスには個別でない値が許可されているため、インデックスは可能性があります。 インデックスのすべての列に同じ値の行が含まれています。これらのインデックスはデータに制限を課さないため、アクセスにのみ使用されます。つまり、すべてのレコードをスキャンせずに特定の範囲のレコードにすばやく到達するために使用されます。

    • ユニーク インデックスのすべての行が一意である必要があるインデックスを指します。つまり、同じ行に、このインデックスのすべての列のNULL以外の値が別の行と同じであるとは限りません。 UNIQUEインデックスは、特定のレコード範囲にすばやく到達するために使用されるだけでなく、データの挿入または更新時に個別の値のルールを破ることをデータベースシステムで許可しないため、データの制限を適用するために使用できます。

      データベースシステムでは、NULL値を許可する列にUNIQUEインデックスを適用できる場合があります。その場合、2つの行の両方にNULL値が含まれていると、2つの行を同一にすることができます(ここでの理論的根拠は、NULLはそれ自体と等しくないと見なされることです)。ただし、アプリケーションによっては、 これは望ましくないことがわかります。これを防ぎたい場合は、関連する列でNULL値を許可しないようにする必要があります。

    • プライマリ UNIQUEインデックスとまったく同じように機能しますが、常に「PRIMARY」という名前が付けられ、テーブルに1つしかない場合があります(必要があります)。 常に1つです。一部のデータベースシステムはこれを強制しませんが)。 PRIMARYインデックスは、テーブル内の任意の行を一意に識別するための主要な手段として意図されているため、UNIQUEとは異なり、NULL値を許可する列では使用しないでください。 PRIMARYインデックスは、行を一意に識別するのに十分な最小数の列に配置する必要があります。多くの場合、これは一意の自動インクリメント番号を含む1つの列ですが、国のリストにある「国コード」など、行を一意に識別できるものが他にある場合は、代わりにそれを使用できます。

      一部のデータベースシステム(MySQLのInnoDBなど)は、テーブルのレコードをPRIMARYインデックスに表示される順序でディスクに保存します。

    • フルテキスト インデックスは上記のすべてとは異なり、データベースシステム間で動作が大幅に異なります。 FULLTEXTインデックスは、上記の3つとは異なり、MATCH()/ AGAINST()句を使用して行われる全文検索にのみ役立ちます。これらは通常、bツリーを使用して内部的に実装されます(左端の列から選択、並べ替え、または範囲を指定できます)。ハッシュテーブル(左端の列から選択できます)。

      他のインデックスタイプが汎用である場合、フルテキストインデックスは、「フルテキスト検索」機能にのみ使用されるという狭い目的に役立つという点で特殊化されています。

    類似点

    • これらのインデックスにはすべて、複数の列が含まれている場合があります。

    • FULLTEXTを除いて、列の順序は重要です。インデックスがクエリで役立つためには、クエリは左から始まるインデックスの列を使用する必要があります。2番目、3番目、または4番目の部分だけを使用することはできません。静的な値と一致するようにインデックスの前の列も使用している場合を除き、インデックス。 (FULLTEXTインデックスがクエリに役立つためには、クエリで allを使用する必要があります。 インデックスの列。)



    1. ネットワーク経由でOracleデータベースにアクセスする方法は?

    2. いつカーソルとデータベースを閉じる必要がありますか?

    3. OracleのDATEDIFF関数

    4. MySQLルートパスワードをリセットする方法