Sql在Mysql的执行

     昨天解析了dblp.xml,存入数据库,生成了若干张临时表。今天上午,对这些临时表进行处理,然后存入实验设计的表中。数据库的数据量比较大,50多M,80多万条记录。因而执行sql时,就遇到了很多问题。

 

1、去除重复tuple

     原始dblp.xml中,同一论文的存在几个完全相同的<cite>,所以要对数据库中的数据进行处理。网上搜到一段代码:

   1) 查询某些属性相同tuple的方法
    select * from vitae a where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq  having     count(*) > 1)

 

   2)删除某些属性相同tuple的方法
   delete from vitae a where (a.peopleId,a.seq) in  (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
   and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

 

    我先执行了1,是在一个有79,000条记录的表上执行的。数分钟后(10分钟以上),结果顺利出来。然后我在记录数为212,273的表上执行2,很久之后还没有出结果。于是我又执行了1),放在532,555条记录的表上。这下情况不妙,电脑直接死机了,cpu100%疯狂地运转着。正常关机都不行,最后只好强行按下了关机键。

 

   重启后,我不死心,在532,555条记录的表执行1。1.5小时过去了,还没有结果出现。

 

   看来下午要好好研究一下sql在mysql的执行效率了。

 

2、select into

   Mysql中不支持select into table的语法,但可以用以下2个语句替代。

   1)create table table_new (select * from table_old);
   2)insert into table_new(name,password...) select table_old.name, table_old.password  from table_old where    

        table_old.name="ct";

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值