老师问的问题!现在有一张表2亿条纪录,要做删除操作,删除1-4月份的纪录,只保留5月份的纪录
要求是:不检索这2亿数据的情况下删除1~4月份的纪录!

解决方案 »

  1.   

    除了where+条件,想不出好的办法,也许你的老师有好办法.
      

  2.   

    用临时表试试
    先把5月份的放到临时表,然后truncate原表
    再将临时表记录插入原表
    删除临时表
    ....
      

  3.   

    不加where貌似不太可能完成的任务。
      

  4.   

    有一种方式可以理解:
    楼主老师的文凭是买的,汉语表达能力有问题;也许他只是想表述这样的意思:如何在不进行全表扫描的前提下删除2亿条数据的大表的中的1~4月份记录而保留5月份记录
    如果这样,答案有如下几种:
    1、表中没有1~4月份数据,只有5月份的,所以什么不做就完成了
    2、表中无5月份数据,只要先trancate掉table,然后随便插入一条5月份的就ok了
    3、在日期字段创建索引,然后用where 日期 >= 5月1日做条件删除,这样虽然也检索了表中数据,但是因为应用了索引,不会全表2亿条数据都扫描
    4、按照月份建立分区表,直接把分区在1-4月的数据删除,这样虽然也要用where条件,但也不是全表扫描了
    5、最笨也最无聊的法子,直接trancate掉table,然后找出原始单据花个把月把5月份的都录进去,这也是唯一完全满足“不检索这2亿数据的情况下删除1~4月份的纪录!”要求的办法
    注意:第5种答案虽然最符合题目要求,但是为了防止别人追着砍,建议同学还是不要拿给老师或客户看
      

  5.   

    SORRY!
    好久没上来了,老师的答案是作表分区。