2

解決する必要があるデータに少し問題があります。メールのプレーンテキストがロングテキスト列に格納されているテーブルがあります。フレームワークで開発を始める前はこんな感じでした。大量の電子メールが格納されている行がすでに 100 万行以上あります。

そのフィールドでテキストを検索できるようにする必要がありますが、結果が返されるまでに時間がかかります。何百人ものユーザーがシステムを使用しており、電子メール コンテンツを検索する機能が必要なため、これは理想的ではありません。

次の単純な SQL ステートメントを試しましたが、レコードを見つけるのに時間がかかりすぎます。
select id from emails where description like "%hello world%";

MySQL のドキュメントによると、フルテキスト インデックスは char、varchar、および text フィールドでのみ使用できます。

ロングテキスト列を効率的に検索する方法を提案できる人はいますか?

また

テーブル全体を実行し、ロングテキスト フィールドのコンテンツを複数のテキスト列に分割してフルテキスト インデックスを作成するために使用できる SQL メソッド/コマンドはありますか?

4

1 に答える 1

1

次の単純な SQL ステートメントを試してみましたが、レコードを見つけるのに時間がかかりすぎます: select id from email where description like "%hello world%";

残念ながら、mysql は%something%varchar フィールドであってもクエリにインデックスを使用できません。実際、'%something' クエリでもインデックスを使用できません。インデックスは、ワイルド カードが文字列の末尾にある場合にのみ使用できます。

MySQL のドキュメントによると、フルテキスト インデックスは char、varchar、および text フィールドでのみ使用できます。

ここでドキュメントがより明確になることを願っています。これは、TEXT ファミリーのフィールドについて話しています。つまり、実際には LONGTEXT および MEDIUMTEXT タイプのフィールドにインデックスを作成できます。これを試して:

CREATE TABLE ltxt(bada LONGTEXT);
ALTER TABLE ltxt ADD FULLTEXT INDEX ftxt2(bada);

はい、あなたは喜んで驚くでしょう!

于 2016-07-28T12:32:06.237 に答える