MySQL社区

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 2738|回复: 2
打印 上一主题 下一主题

mysql百万数据操作问题(急~~~~~)

[复制链接]
跳转到指定楼层
1#
发表于 2014-7-31 17:18:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在本人在做百万数据的联接操作(所有表都是至少几十万,有的上百万),首先是把A表,B表根据三个字段判断相等而联接一起生成中间表,而此时中间表还需与C表根据两个字段判断相等再进行联接生成最后的结果。问题是:中间表已经生成好了,用了0.8s,但是与C表联接而长时间等待,生成失败。(A,B,C表都已经建好相关的索引)。各位大神有没有很好的建议可以帮助小弟!!!!
代码如下:

A,B表联接语句
select   若干字段   from A WHER exists (select 1 from B where A.1=B.1 and A.2=B.2 AND A.3=B.3) GROUP BY A.1,A.2(中间表)



中间表与C表:
在上面语句基础上
select * from (中间表) D,C where D.1=C.1 and D.2=C.2



各位大神有没有很好的建议可以帮助小弟!!!!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享淘帖 顶 踩
2#
 楼主| 发表于 2014-7-31 17:20:13 | 只看该作者
补充一个问题   select * from (中间表) D    这个语句就已经不能查出数据来了,用小数据来测试这语句是可以用的
3#
发表于 2014-7-31 18:29:10 | 只看该作者
感觉你语句有严重的效率问题。
首先不建议复杂的语句。
其次exists、group by 等的效率比较低。
另外用explain看看语句的执行计划,来具体优化。

不过有点疑惑的是,你的第二句相对简单,不应该有问题,其实慢的应该是你第一句,另外也不知道你的中间表是个什么情况,需要检查索引情况;与其这样还不如用一个的大的join语句来完成,看看效果,不行就分成很多小SQL,然后程序或者用其他办法来拼接。

后4天不在线,请其他感兴趣的朋友继续作答吧...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|申请友链|小黑屋|Archiver|手机版|MySQL社区 ( 京ICP备07012489号   
联系人:周生; 联系电话:13911732319

GMT+8, 2024-6-27 22:18 , Processed in 0.074886 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表