免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3047 | 回复: 1
打印 上一主题 下一主题

MYSQL一对多记录表联合查询问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-29 18:55 |只看该作者 |倒序浏览
2个表a_movie 与a_mclassid

a_movie 表记录了影片资料的信息字段是movid(主键),title,click,addtime,modifytime等,其中有click,addtime,modifytime分别记录了点击,添加时间,修改时间。时间为int

a_mclassid表记录了影片分类的对于信息,字段movid是外键。对应a_movie表中movid,字段category是记录影片所属分类的ID,
a_movie可能在a_mclassid中存在多条记录,因为一部影片可以选择多个分类的。
所以在查询影片记录的时候需要过滤掉重复的记录。

SQL:SELECT a.* from a_movie as a right join a_mclassid as b on a.movid=b.movid WHERE a. locked=0 and a.lookgid<>2 and b.caegory in (1,2,3,4,5,6) groyp by b.movid order by a.addtime desc

a表中的click,locked,addtime是单列索引b 表中的movid,category 都是单列索引
这个语句执行后效率极差.explain 出现了
1          SIMPLE          b          range          category,movid          category          4          NULL          189          Using where; Using temporary; Using filesort
1         SIMPLE         a         eq_ref         PRIMARY         PRIMARY         4         vodcms.b.movid         1         Using where

查询速度大约是:0.0182左右。

大家有什么好优化办法,

论坛徽章:
0
2 [报告]
发表于 2008-11-29 19:08 |只看该作者
或者有什么更好的一对多的表设计方法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP