ホームページ >データベース >mysql チュートリアル >MyISAM とストアド プロシージャを使用して InnoDB テーブルで効率的な全文検索を実行するにはどうすればよいですか?

MyISAM とストアド プロシージャを使用して InnoDB テーブルで効率的な全文検索を実行するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-16 12:14:15759ブラウズ

How Can I Perform Efficient Full-Text Search on InnoDB Tables Using MyISAM and Stored Procedures?

MyISAM とストアド プロシージャを使用した InnoDB での全文検索

InnoDB テーブルで全文検索を実行する迅速かつ効率的な方法を見つけると、挑戦してください。 Sphinx などのツールが解決策を提供しますが、この記事では MyISAM とストアド プロシージャを使用した純粋な MySQL アプローチを検討します。

課題

複数の文字列を検索する単純なクエリLIKE ステートメントを使用する行は、パフォーマンスが遅いため問題が発生する可能性があります。

SELECT ... WHERE row LIKE '%some%' OR row LIKE '%search%' OR  row LIKE '%string%'

解決策

提案された解決策には、InnoDB テーブルにインデックスを付ける MyISAM フルテキスト テーブルを作成することが含まれます。これにより、検索が必要な特定の列 (件名など) にインデックスを付けることができます。

データベース構造

InnoDB テーブルは、ユーザーやユーザーなどのプライマリ データに対して定義されます。

create table users (...) engine=innodb;

create table forums (...) engine=innodb;

create table threads (
...
subject varchar(255) not null, -- column we want to search
...
)
engine=innodb;

MyISAM フルテキスト テーブル (threads_ft など) は検索を提供します。 Index.

create table threads_ft (
...
subject varchar(255) not null,
fulltext (subject), -- fulltext index on subject
...
)
engine=myisam;

ストアド プロシージャ

ストアド プロシージャ (例: ft_search_threads) は、検索語を入力として受け入れ、MyISAM フルテキスト インデックスを使用して検索を実行します。次に、結果を InnoDB テーブルと結合して、必要なデータを取得します。

create procedure ft_search_threads (
in p_search varchar(255)
)
begin
...
select
 t.*,
 ...
from
 threads_ft tft
...
match(tft.subject) against (p_search in boolean mode) 
...
order by 
 rank desc
...
end;

使用例

ストアド プロシージャは、PHP アプリケーションまたはコマンドライン ツール:

call ft_search_threads('+innodb +clustered +index');

この例では、検索語に一致するスレッド テーブルの上位 100 件の結果が返されます。 "innodb クラスター化インデックス。"

このアプローチを利用すると、パフォーマンスを損なうことなく、InnoDB テーブルでフルテキストのような検索機能を実現できます。これには、インデックスを作成するための専用の MyISAM テーブルを作成し、検索とデータ取得を実行するストアド プロシージャを作成することが含まれます。

以上がMyISAM とストアド プロシージャを使用して InnoDB テーブルで効率的な全文検索を実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。