昨天下午,一直都在解决去除重复元组和数据过大sql无法执行成功的问题。网上找到了多种去除重复元组的方法,对于数据量较小时,都是可以顺利执行的。可当数据量上升到几十万条时,sql执行就直接当掉了。不断地变换新的sql语句,但问题依然没有解决。
今天上午,顺利解决了问题。总结如下:
1、show processlist
查询当前sql执行的状态,我的sql语句一直停留在copying tmp table。网页http://joewalker.javaeye.com/blog/277626以及http://imysql.cn/node/15都可以参考。
2、explain
这个命令很有用,可以分析sql执行时使用的索引信息。我的sql分析后,出现了Using filesort ,难怪速度很慢。网上还有人把这个问题当成bug提交给mysql的。http://blog.csdn.net/yangyu112654374/archive/2009/06/08/4251624.aspx里有解决方法,讲得很详细。其实就是把order by,group by和join所在的属性加上索引,这样sql执行的速度就会加快。
问题总算解决了,下午可以开始进入代码部分了。另外,dblp.xml(2002-10)中,inproceedings里约有10万条左右数据的会议信息,在proceedings里找不到。我只好从inproceedings里提取额外的信息,存入了conference的表中,否则将损失10万条数据。不知道在最新的dblp.xml里,数据质量有没有提高。