在mysql中选择LIKE之前的x最后一行

时间:2013-09-02 12:09:48

标签: php mysql

我有一个很长的mysql查询,我正在尝试改进一点。 基本上,它需要来自不同新闻来源的头条新闻,并将我们数据库中的任何电视节目与之匹配。 标题表  “权力的游戏更新” 应该匹配 节目表中的“权力的游戏”。

它目前运行35秒(不太好;慢):

 SELECT
    news_feed.title,
    shows.name,
    shows.id,
    news_feed.news_id,
    news_feed.created_on
  FROM news_feed
  JOIN shows ON news_feed.title
     RLIKE CONCAT(
         '(^|[[:blank:][:punct:]])', shows.name, '($|[[:blank:][:punct:]])'
     )

从它的外观来看,我可以通过告诉它要查看的news_feed.title的数量来改进它。如何添加“ORDER by news_id DESC LIMIT 50”之类的内容,以便它在RLIKE CONCAT之前执行?

我认为这样做应该足以让它运行一段可接受的时间? (它每天运行五次,所以只要它不会使整个服务器崩溃,这不是什么大问题)

1 个答案:

答案 0 :(得分:4)

创建一个子查询,以限制要比较的行数。

SELECT
    sq.title,
    shows.name,
    shows.id,
    sq.news_id,
    sq.created_on
FROM (

    SELECT
        news_feed.title,
        news_feed.news_id,
        news_feed.created_on
    FROM
       news_feed
    ORDER BY  news_id DESC LIMIT 50

) AS sq
JOIN shows ON sq.title
     RLIKE CONCAT('(^|[[:blank:][:punct:]])', shows.name, '($|[[:blank:][:punct:]])')