Mysql Sentence需要很长时间

时间:2014-03-20 18:33:35

标签: php mysql

我有3张桌子:
新闻: ID,标题,日期
标签: ID,姓名
News_Tag: id_tag,id_news

我有一个像这样的mysql语句的搜索功能:

SELECT DISTINCT
    news.title,
    news.id,    
FROM
    news,
    tags,
    news_tag
WHERE
    news.date > now()
AND (
    news.title LIKE '%brasil%'
    OR (
        tags. NAME = 'brasil'
        AND news_tag.id_news = news.id
    )
)

Pero esta toma mucho tiempo,que estoy haciendo mal?

1 个答案:

答案 0 :(得分:1)

我建议您避免使用旧的逗号运算符语法进行连接操作,而是使用JOIN关键字。

SELECT DISTINCT news.title
     , news.id
  FROM news
  LEFT
  JOIN news_tag
    ON news_tag.id_news = news.id
  LEFT
  JOIN tags
    ON tags.id = news_tag.id_tag
 WHERE news.date > NOW()
   AND (news.title LIKE '%brasil%' OR tags.name = 'brasil')

适当的索引可能会提高绩效:

... ON tags (name, ...)
... ON news_tag (id_news, id_tag)

注意:此查询(实际上是对两个查询的UNION设置操作)将返回相同的结果:

SELECT news.title
     , news.id
  FROM news
 WHERE news.date > NOW()
   AND news.title LIKE '%brasil%'
 UNION
SELECT n.title
     , n.id
  FROM news n
  JOIN news_tag
    ON news_tag.id_news = n.id
  JOIN tags
    ON tags.id = news_tag.id_tag
   AND tags.name = 'brasil'
 WHERE n.date > NOW()