0

データを比較するためのSQLクエリを作成しました

SELECT 
    title
FROM
    links_forum
WHERE
    title REGEXP '[[:<:]]The grey[[:>:]].*[[:<:]](cam|ts|divx|mkv|xvid|dvd|dvdr|dvdrip|brrip|br2dvd|r5|r6|x264|ts2dvd|dvd5|dvd9|720p|1080p)[[:>:]]';

実行に150秒ほどかかります

より速い方法はありますか?

4

2 に答える 2

1

一致演算子を使用して検索すると、列REGEXPのインデックス スキャンを使用してコンテンツを検索することはできません。title1 つの列しか取得していないため、インデックスをオンにすることでメリットが得られる可能性がありtitleます。まだ行っていない場合は試してください。

REGEXP は、最速のテキスト マッチング アルゴリズムでもありません。試すことで利益が得られるかもしれません

   SELECT title
     FROM links_forum
    WHERE title LIKE '%The grey%'
      AND title REGEXP (your big regular expression)

これでもインデックスの使用は無効になりますがtitle、検索用語の最も重要な部分であると思われる列をより高速に検索できます。LIKEより少し速いですREGEXP

もう 1 つの選択肢: テキストの大きな塊からビデオ メディアと思われるものを検索する代わりに、ビデオ メディアのタイトルを含む別のテーブルを作成することを検討してください。

具体的には、links_forum_id 列と title 列を含む、links_forum_media_title テーブルを作成できます。次に、エントリを挿入するとlinks_forum、この特定のテーブルにもエントリが挿入されます。次に、そのテーブルに (title, links_forum_id) インデックスを作成し、それを使用してタイトルを検索できます。それはプログラミングの変更です。しかし、それはあなたのパフォーマンスの問題を決定的に解決します. このアプリケーションをスケールアップすることを計画しているなら、それは良いことです。

FULLTEXT 検索を試すことができます。しかし、ある種のメディア フォーマット コード (cam、ts、divx) を探すこの種のアプリケーションには適していません。

于 2013-09-27T13:34:55.397 に答える