大家好,我有一个数据查询问题,用了几个方法还是没有解决,特来请教。我有一个包含新闻的数据表,其中有一个字段是存放该新闻的关键字的,以如下形式存放。
"关键字1;关键字2;关键字3;"其中分号是中文件全角的。我现在有一个需求,就是查询这条新闻相似的新闻,就是用这个"关键字"来关联。于是我写了如下的SQL语句,一开始的时候还是可以使用的,但是用到现在越来越慢。特别奇怪的是,不是所有条都这样,有些新闻几乎就是要卡死,卡的不动。明显遇到了查询性能问题,特来请教大家如何解决这个问题。这条语句我是用正则来解决新闻关键字相关联的情况。
select * from news where ID<>? and concat(';',Keywords,';') regexp concat(';(',replace(?,';','|'),');') and M_IsDelete=FALSE order by Datetime desc limit 0,5

解决方案 »

  1.   

    没办法,修改表结构
    ID content
    1  关键字1
    2  关键字2
    3  关键字3
      

  2.   

    用你的结构,无法优化,无论用字符串查找函数 OR 正则,均无法用到索引
    OR
    用全文搜索试试
      

  3.   

    我从两个方面说这个事情吧。一、需求
    我们网站有很多新闻,当点击新闻标题时,进入新闻详细页面。这个页面显示新闻内容,然后下方列出与这条新闻相关的新闻。我问的问题就与查询相关新有关系,相关性通过每条新闻的"关键字"体现并关联。如下面的语句。
    select * from news where concat(';','苹果;鸭梨;葡萄',';') regexp concat(';(',replace('鸭梨',';','|'),');') order by Datetime desc limit 0,5
      

  4.   

    二、MYSQL数据库
    能不能让上面这个需求快点,我这一点页面就卡死。