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匹配运算符进行搜索会失败使用title列上的索引扫描来查找您的内容。您仍然可以从索引中获得一些好处,title因为您只检索那一列,所以如果您还没有这样做,请尝试一下。

REGEXP 也不是最快的文本匹配算法。你可能会从尝试中受益

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

这仍然会破坏任何索引的使用,但它会title更快地搜索列,因为我认为这是您的搜索词中最重要的部分。LIKE比 快一点REGEXP

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

具体来说,您可以创建一个 links_forum_media_title 表,其中包含 links_forum_id 和 title 列。然后,当您向其中插入条目时,links_forum您还将在此特定表中插入条目。然后您可以在该表上创建一个 (title, links_forum_id) 索引并使用它来查找您的标题。那是程序上的改变。但它将彻底解决您的性能问题。如果您打算扩大此应用程序的规模,那将是一件好事。

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

于 2013-09-27T13:34:55.397 回答
0

我相信这个查询可能只会被优化一小部分。也许您需要的是优化您的数据库并有一些其他方法来了解给定条目是否属于指定的任何类型。例如,添加一些字段来说明给定条目是视频还是类似的东西。

于 2013-09-27T13:24:49.007 回答