快速我的mysql查询宽度REGEXP

时间:2013-09-27 13:19:10

标签: mysql regex performance

我已经进行了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秒才能超越

有更快的方法吗?

2 个答案:

答案 0 :(得分:1)

使用REGEXP匹配运算符在title列上使用索引扫描搜索失败,以查找您的内容。您仍然可以从title上的索引中获得一些好处,因为您只检索了一列,所以如果您还没有这样做,请尝试一下。

REGEXP也不是最快的文本匹配算法。您可以从尝试

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

这仍将无法使用任何索引,但它会更快地搜索title列,因为我认为这是您搜索字词中最重要的部分。 LIKEREGEXP快一点。

另一个选择:您可以考虑在其中创建一个包含视频媒体标题的单独表格,而不是搜索大量文本以查找视频媒体。

具体来说,您可以创建一个links_forum_media_title表,其中包含links_forum_id和title列。然后,当您将条目插入links_forum时,您还将在此特定表中插入条目。然后,您可以在该表上创建(title,links_forum_id)索引,并使用它来查找您的标题。这是一个编程改变。但它最终将解决您的性能问题。如果您计划扩展此应用程序,那就很好。

您可以尝试FULLTEXT搜索。但是对于这种寻找某种媒体格式代码(cam,ts,divx)的应用程序来说,这并不是很好。

答案 1 :(得分:0)

我相信这个查询可能只是稍微优化一下。也许你需要的是优化你的数据库,并有一些其他的方法来知道给定的条目是否是指定的任何类型。例如,添加一些字段,说明给定的条目是视频还是类似的东西。