1

我有一个很长的 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?

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

4

1 回答 1

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:]])')
于 2013-09-02T12:12:39.147 回答