1

テーブルに3つのテーブルがあり、空白で分割されたフレーズからそれらから検索したい

例:クイックブラウン。

最初に「Thequickbrown」、次に「The」、「quick」、「brown」というフレーズを検索します

私のアプローチは、すべてのテーブルを結合してから検索することです。

SELECT body FROM
(SELECT body FROM table1
UNION ALL
SELECT body FROM table2)
) AS row WHERE body LIKE '%The quick brown%' OR body LIKE '%The%' OR body LIKE '%quick%' OR body LIKE '%brown%'

より高速でそれを行うための最良の方法は何ですか?

ちなみに私はMySQLを使用しています

4

1 に答える 1

1

ほんの少しの観察:

  • 句の間にsがあるためOR、クエリは常にlike %the%句を実行します。たとえば、これには常に、最も制限の厳しい句よりも幅広い結果が含まれ、結果が得られます。あなたが欲しくないと私が思うこと。
  • %で始まる句があるので、それらの全表ユニオンがない場合でも、そこに全表スキャンがあることが保証されます。

最善の解決策は、スフィンクスのような全文検索コンポーネントをテクノロジースタックに追加することだと思います。これにより、複雑なアルゴリズムに基づいて、こうした種類の検索を実行し、重み付けされた結果を返すことができるからです。

于 2012-10-16T02:48:06.363 に答える