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

MySQL5.0インデックス-一意と非一意

    UNIQUEとPRIMARYKEYは制約です 、インデックスではありません。ほとんどのデータベースは、インデックスを使用してこれらの制約を実装していますが。インデックスに加えて制約の追加のオーバーヘッドは重要ではありません。特に、意図しない重複が発生した場合(発生した場合ではない場合)に追跡して修正するコストをカウントする場合は重要です。

    インデックスは通常、選択性が高い場合に効果的です。 。これは、行の総数に対する個別の値の数の比率です。

    たとえば、社会保障番号の列に、100万の異なる値を持つ100万の行があるとします。したがって、選択性は1000000/1000000 =1.0です(まれな歴史的な例外はありますが、SSNは一意であることが意図されています)。

    ただし、そのテーブルの別の列である「gender」には、100万行を超える2つの異なる値しかない場合があります。 2/1000000=非常に低い選択性。

    UNIQUEまたはPRIMARYKEY制約のあるインデックスは、1.0の選択性を持つことが保証されているため、インデックスが可能な限り効果的です。

    主キーと一意性制約の違いについて質問されました。主に、テーブルごとに1つの主キー制約のみを持つことができます(その制約の定義に複数の列が含まれている場合でも)が、複数の一意の制約を持つことができます。一意性制約のある列はNULLを許可できますが、主キー制約の列はNULLを許可してはなりません。それ以外の点では、主キーと一意のキーの実装と使用法は非常に似ています。

    MyISAMとInnoDBのどちらを使用するかについてコメントで質問されました。 MySQLでは、ストレージエンジンという用語を使用します 。これら2つのストレージエンジンの間には微妙な違いがたくさんありますが、主なものは次のとおりです。

    • InnoDBはトランザクションをサポートしているため、変更をロールバックするかコミットするかを選択できます。 MyISAMは事実上常に自動コミットされます。
    • InnoDBは外部キー制約を適用します。 MyISAMは、外部キー制約を強制したり、保存したりしません。

    これらの機能がアプリケーションに必要なものである場合は、InnoDBを使用する必要があります。

    あなたのコメントに答えるのは、それほど単純ではありません。 InnoDBは、実際にはMyISAMよりも高速である場合が非常に多いため、アプリケーションの選択、更新、同時クエリ、インデックス、バッファー構成などの組み合わせによって異なります。

    http:/を参照してください。 /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ ストレージエンジンの非常に徹底的なパフォーマンス比較のために。 InnoDBはMyISAMに頻繁に勝つため、一方が他方よりも速いとは明らかに不可能です。

    ほとんどのパフォーマンス関連の質問と同様に、アプリケーションで答える唯一の方法 アプリケーションと代表的なデータサンプルを使用して両方の構成をテストし、結果を測定することです。



    1. OracleのNUMTOYMINTERVAL()関数

    2. OracleのASIN()関数

    3. PDOを使用した行数

    4. MariaDB警告:「[メール保護]」には両方があります...パスワードは無視されます