検索:FULLTEXTまたはLIKE?

おそらく、すべての開発者が1つの問題の2つの解決策を選択する瞬間に来て、もちろん決定的な決定要因は(プロセス時間の観点から)最速の方法です。 それで、私のCMSの検索の開発中に、何が良いのか、フルテキストインデックスを使用するか、LIKE比較演算子を使用して、少量の情報を使用してデータベース検索を実行することを考えました。



私の質問に答えるために、私は少し経験をしました。5,000行を含む4つのフィールド(そのうち2つは検索に使用され、FULLTEXTによってインデックス付けされました)を持つテーブルを作成しました。 検索に使用されるフィールドには、1つの大きなテキストからランダムに選択された255文字が含まれていました。 検索は、4文字以上のランダムな単語でも実行されました。



最初の段階では、1つのフィールドで1つの単語が検索されました。 第2段階では、1つのフィールドで2つの単語のいずれかが検索されました。 第3段階では、2つの単語のうちの1つが両方のフィールドで検索されました。 すべての段階で、検索は最初にMATCH(field_name)AGAINST( 'searched_text')コンストラクトを使用して実行され、次にLIKEを使用しました。



注:自宅のコンピューターAMD 64 X2 4200、2GB RAM、Apache、MySQL 5.0でテスト済み。



各段階でのリクエストの数は100です。頻度-1秒に1回。



試験結果





このグラフは、検索クエリの平均実行時間を3段階で示しています。







正直なところ、リクエストの複雑さにわずかに異なる時間依存性があり、検索クエリのタイプ間の明確な境界が予想されました。 しかし、これはFULLTEXTインデックスによる検索が単語の形態(追加のインストールおよびロシア語を含む)を考慮に入れているため、追加の負荷が発生するという事実によって説明されます。



長所と短所





LIKE演算子を使用した検索の利点:





欠点のような:





全文検索の利点:





短所:





エピローグ



この実験は理想的であるとは主張していませんが、データベースサイズが小さい2つのタイプの検索の速度の違いをはっきりと示していると思います。 私の意見では、両方のオプションには異なる状況で存在する権利があります。



UPD:状況が異なると、テーブルの行数が異なるケースを意味します。 LIKE演算子は、膨大な数のレコードがなく、すべてのレコードで検索が実行されるため、数十万行のテーブルには適用できない場合に適しています。



PS:全文検索についてはこちらをご覧ください



All Articles