私の MySQL データベースには、長すぎてインデックスを配置できない文字列列 (SHA ハッシュなど) があります。この列に対して効率的なクエリを実行するにはどうすればよいですか?
- 列の最初の文字にインデックスを付けることができ
N
ますが、この「部分的な」インデックスを利用するクエリはどのようになりますか? - 文字を含む 2 番目の列を作成し、
N
その上に完全なインデックスを配置して、「部分的な」インデックスの代わりにすることができます。次に、クエリを実行して 1 つ以上のレコードを取得し、メモリ内でフィルター処理の最終ステップを実行します。 - 全文検索機能は使えますが、MyISAM を使う必要があります。MyISAM は ACIDity をサポートしていません。
MySQLでこれを達成する適切な方法は何ですか?
問題は、列のサイズを小さくしたり、キーの長さが短すぎる場合にデータベースを再構成したりすることではありません。それは、できればアプリケーションに負担をかけたり、追加の列をポップアップしたりせずに、部分インデックスまたはそのようなものを簡単に活用することです。
私の特定のケースでは、UTF8 テーブルの 2 つの列で複合キーを探しています。
create table fingerprinted_item (
type varchar (512) not null,
fingerprint varchar (512) not null,
primary key (fingerprint, type)
);
-- Then there may be a child table.
MySQL は次のように述べています。
[42000][1071] Specified key was too long; max key length is 767 bytes
別のサーバーでは、キーの最大長は 1000 バイトです。