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

varcharのSQLインデックス

    VARCHARのキー 列が非常に長くなる可能性があるため、ページあたりのレコード数が少なくなり、深さが増します(B-Treeのレベルが増えます) )。インデックスが長くなると、キャッシュミス率も高くなります。

    平均していくつの文字列が各整数にマップされますか?

    比較的少ない場合は、整数列とPostgreSQLにのみインデックスを作成できます。 レコードに対して細かいフィルタリングを行います:

    CREATE INDEX ix_mytable_assoc ON mytable (assoc);
    
    SELECT  floatval
    FROM    mytable
    WHERE   assoc = givenint
            AND phrase = givenstring
    

    文字列ハッシュにインデックスを作成することも検討できます:

    CREATE INDEX ix_mytable_md5 ON mytable (DECODE(MD5(phrase), 'HEX'));
    
    SELECT  floatval
    FROM    mytable
    WHERE   DECODE(MD5(phrase), 'HEX') = DECODE(MD5('givenstring'), 'HEX')
            AND phrase = givenstring -- who knows when do we get a collision?
    

    各ハッシュは16のみです バイト長なので、選択性をほぼ完全に維持しながら、インデックスキーははるかに短くなります。



    1. Javaを使用してMySQLAmazonRDS(SSL / TLS)への安全な接続を確立する

    2. Visual Studio:ContextSwitchDeadlock

    3. PostgreSQL用Pgpoolのガイド:パート2

    4. SQLAlchemyでUUIDを使用するにはどうすればよいですか?