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

MySQL複合インデックス(WRT RailsポリモーフィックアソシエーションおよびSTI)でのキーのパフォーマンスの高い順序付け

    私自身の調査から(ただし、私は専門家のDBAではありません)、複合キーインデックスの順序を決定する際に考慮すべきことが2つあることを学びました。

    まず、列のカーディナリティに関して、インデックスは一般に、カーディナリティの高い列を検索するのに適しています。そのため、カーディナリティが最も高い列をインデックスの最初に配置する傾向があります。参考までに、<​​a rel="nofollow noreferrer noopener"href="https://www.informit.com/articles/article.aspx?p=377652">MySQLクエリ最適化 というタイトルの記事があります。 つまり:

    あなたの場合、_id 列は明らかにその定義によりよく適合しているため、キーのプレフィックスとして適しています。

    考慮すべきもう1つのことは、これらのインデックスの再利用性です。ほとんどの(すべてではないにしても)データベースシステムでは、複合キーのプレフィックスを再利用できます。たとえば、(owner_id, owner_type)の複合キー owner_idのクエリでも使用できます ただし、owner_typeにはありません 。

    したがって、質問で説明したことから、2つのインデックスを使用したほうがよい場合があります。(owner_id, owner_type)の複合キーインデックスです。 もう1つは(owner_type)にあります 。

    最後に、それは本当にすべてあなたのデータセットとクエリに帰着します。複数のシナリオ、さまざまな複合キーの順序を使用したベンチマークを試して、最適なソリューションを確認してください。また、インデックスにはテーブルへの書き込みペナルティが発生することを忘れないでください。

    更新 :複合キーインデックスに関する別のかなり人気のあるSOの質問もあります:

    いつ複合インデックスを使用する必要がありますか?



    1. node.jsmysqlプールbeginTransaction&connection

    2. ヒストグラムの粗い配置を使用したSQLServerの結合推定

    3. PHPスクリプトjson_encodemysqlリクエストはgetJSON()にパススルーできません

    4. MySQLデータベースで最も繰り返される類似フィールドを取得する