0

mysql innodb-tableのテキストフィールドにインデックスを付けようとしていますが、ハッシュインデックスが次のようになります。

CREATE INDEX teksti_index USING HASH ON maili_teksti(teksti(100));

つまり、これはmysqlがフィールドの最初の100文字を取得し、ハッシュを計算する(そしてハッシュにインデックスを付ける)ことを意味しますか?数値を100から200に変更した場合、インデックスのサイズは同じですか?

そして...この種のコマンドを最適化したい場合、これは正しい方法です。

SELECT count(*) from teksti where teksti='random text';
4

1 に答える 1

3

CHARVARCHAR、およびTEXT列を扱う場合( を扱っているTEXTように)、インデックスを作成するときに割り当てるプレフィックス長により、最初の X 文字を使用してハッシュが作成されます。

標準インデックスを扱う場合、インデックスされるデータのサイズを変更すると、インデックスのサイズも変更されます (つまり、文字を追加するとインデックスが増加し、削除すると減少します)。HASH インデックスを扱う場合、それに関する特定のドキュメントが見つからないため、これは推測ですが、ハッシュ アルゴリズムの性質上、(少なくとも、それほどではなく) 増加しないと想定します。

=HASH インデックスはand<=>演算子にのみ適用されるため、 の使用例はこのタイプのインデックス ( sourceteksti='random text' )に最適です。や演算子などの他の演算子を使用する必要がある場合は、代わりにインデックスへの切り替えを検討する必要があります。LIKE<>B-TREE

FULLTEXT完全な代替オプションとして、インデックスをチェックアウトできます。これにより、大量のマッチング機能が提供されますが、かなり堅牢で、多すぎる可能性があります。Full-Text Search Functionsこのページのドキュメントには、FULLTEXTMyISAM でのみ使用できると記載されています、ドキュメント ページでは InnoDB のインデックスをカバーしてSection 14.2.4.12.3いるため、これは利用できる場合とできない場合があります =P.InnoDB Table and IndexFULLTEXT

于 2012-10-02T13:26:36.607 に答える