我有一个很长的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
之前执行?
我认为这样做应该足以让它运行一段可接受的时间? (它每天运行五次,所以只要它不会使整个服务器崩溃,这不是什么大问题)
答案 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:]])')