tagid tagname aid tagorder
1 少林寺 1 0
2 方丈 1 1
3 永信 1 2
4 一行 1 3
5 执法 1 4
6 系统 1 5
7 僧众 1 6
8 精神 1 7
1 少林寺 2 0
3 永信 2 1
2 方丈 2 2
4 一行 2 3
我有一张表如上,存了大约500万条文章的关键词。tagid代表的是关键词的唯一id,tagname就是关键词,aid,是文章的编号,tagorder是存储同一篇文章多个关键词的优先等级(0最高,1次之...以此类推)
我写了一个查询如下:
要查询的关键词为“方丈 少林寺 僧众”
程序如下:
`$tags=explode(' ',"方丈 少林寺 僧众");
$keywords="('".implode("','",$tags)."')";
$sql="SELECT aid,tagname FROM ".DB::table("foyuan_tag_article")."
WHERE tagname in $keywords
GROUP BY aid ORDER BY COUNT(aid) DESC,tagorder ASC,aid DESC LIMIT 0,10";`
这样能查处相关性最高的文章。
但效率很低下,大概需要10秒钟才能查询出来。
求优化方法。
如果不使用全文索引,也可以使用以下方法,只是要动数据库的结构。
关键字,每个一条
当前表中的tagname改成tg_id int null,并添加索引
查询时先查询f_tagname表,得到tg_id,再使用tg_id在当前表中查询.
mysql处理int比char快.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。