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

一意のインデックスは列検索のパフォーマンスに優れていますか? (PGSQLとMySQL)

    データが一意である場合は、UNIQUEを作成する必要があります それらのインデックス。

    これは、追加のオーバーヘッドがないことを意味し、特定の場合にオプティマイザーの決定に影響を与えるため、より適切なアルゴリズムを選択できます。

    SQL Server内 およびPostgreSQL たとえば、UNIQUEで並べ替える場合 キーを押すと、オプティマイザーはORDER BYを無視します その後に使用される句(関連性がないため)、i。 e。このクエリ:

    SELECT  *
    FROM    mytable
    ORDER BY
            col_unique, other_col
    LIMIT 10
    

    col_uniqueのインデックスを使用します other_colではソートされません 役に立たないからです。

    このクエリ:

    SELECT  *
    FROM    mytable
    WHERE   mycol IN
            (
            SELECT  othercol
            FROM    othertable
            )
    

    INNER JOINにも変換されます (SEMI JOINとは対照的 )UNIQUEがある場合 othertable.othercolのインデックス 。

    インデックスには、常に行へのある種のポインタが含まれています(ctid PostgreSQLで 、MyISAMの行ポインタ 、InnoDBの主キー/一意化子 )そしてリーフはこれらのポインタ上で順序付けられているので、実際にはすべてのインデックスリーフは何らかの方法で一意です(明確ではないかもしれませんが)。

    パフォーマンスの詳細については、ブログのこの記事を参照してください:



    1. MySQLとPHP-空の文字列ではなくNULLを挿入します

    2. RecyclerViewでのデータの表示

    3. Scala SlickでEnumを使用する方法は?

    4. 致命的なエラーmysql.h:コンパイル中にそのようなファイルまたはディレクトリはありません