0

完全な InnoDB MySql データベースの 2 つのフィールドでテキスト検索を行う必要があります。過去に私は使用しました:

Field1 LIKE %text% OR Field2 LIKE %text%

しかし、今ではデータが大幅に増加し、「いいね」検索が遅くなりすぎました。そこで、別のより良い解決策を探し始めました。

今から私は試しました:

  • フルテキスト インデックス (MATCH(...) AGAINST) -> 先頭のワイルドカードをサポートしていません

  • CONTAINS -> MySql では使用不可 (Transact-Sql のみ)

  • フルテキスト インデックスを逆にする -> 先頭のワイルドカードで動作しますが、一致が途中にある場合は動作しません

  • REGEXP -> LIKE よりも速くはない

フルテキスト インデックスには MyISAM の「シャドー テーブル」を使用しました...

Sphinx、Lucene、se などの外部検索エンジンを使用したくない

だから私の質問:私が忘れたことはありますか?両方のワイルドカードを機能させるためのトリックを考えています。Oracle の CONTEXT インデックスのようなものです。または私は知りません...それが私が尋ねる理由です;)

4

1 に答える 1

0

パターンの先頭のパーセント '%' 記号によってテーブル スキャンが実行されるため、データ ボリュームが増加するにつれてパフォーマンスが低下します。

これは、フィールドの非アトミックな性質により、データがもはや「リレーショナル」ではないことも反映していることに注意してください。データ ストレージ エンジンとしてまだ RDBMS を使用しているにもかかわらず、DB はもはやリレーショナル データベースではありません。

真の解決策は、Field1 と Field2 を一連のリレーショナル (アトミック) フィールドに戻すことによって、データ テーブルを再構築することです。これは当面のプロジェクトの合理的な範囲を超えている可能性があります。しかし、それは解決策です。

于 2013-03-05T00:18:38.200 に答える