回 帖 发 新 帖 刷新版面

主题:解决MySQL中In操作语句慢的问题

现在的CMS系统、博客系统、BBS等都喜欢使用标签tag作交叉链接,因此我也尝鲜用了下。但用了后发现我想查询某个tag的文章列表时速度很慢,达到5秒之久!百思不解(后来终于解决),我的表结构是下面这样的,文章只有690篇。

文章表article(id,title,content)
标签表tag(tid,tag_name)
标签文章中间表article_tag(id,tag_id,article_id)
其中有个标签的tid是135,我帮查询标签tid是135的文章列表
用以下语句时发现速度好慢,我文章才690篇 
select id,title from article where id in(
    select article_id from article_tag where tag_id=135

其中这条速度很快:select article_id from article_tag where tag_id=135
查询结果是五篇文章,id为428,429,430,431,432
我用写死的方式用下面sql来查文章也很快
select id,title from article where id in(
428,429,430,431,432

我在SqlServer中好像不会这样慢,不知MySQL怎样写好点,也想不出慢在哪里。

后来我找到了解决方法:

select id,title from article where id in(
select article_id from (select article_id from article_tag where tag_id=135)tbt


昨晚通过这种方式使速度变快超多,先查成一个table再用in语句,不使用join是因为一对多关系会join出很多条记录。

作者:叶荣

转载请注明来自: 
[url=http://www.caodong.net/Article/733.html]http://www.caodong.net/Article/733.html[/url]

回复列表 (共2个回复)

沙发

沙发自己坐!

板凳

谢谢分享

我来回复

您尚未登录,请登录后再回复。点此登录或注册