ホームページ >データベース >mysql チュートリアル >MyISAM とストアド プロシージャを使用して InnoDB テーブルで効率的な全文検索を実行するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。