oracle 表最大可存储多少条记录??我有个存储生产过程数据的表,发现系统查询太慢,检查数据表,
select count(1) from 表,执行这条语句要10多分钟,最终出来1.7条;是不是记录太多了?oracle 表最大可存储多少条记录??怎么处理啊???不敢执行delete ,怕执行死机器了!!!!!!!郁闷啊,老大的些,干净帮帮忙~~~~~~~~十万火急!!!!!!!!

解决方案 »

  1.   

    看看oracle里面的rowid的组成就知道能存多少记录了,rowid占10个字节,前32位为objectid,
    中10位为相对文件号,中后22位为块号,最后16位为记录号,可见rowid支持的最大的块号为2^22个块,
    每个块最大为2^16条记录,
    select 比较慢查询出数据1.7条?单位1.7万还是1.7亿?
    如果全部删除建议truncate,
      

  2.   

    select count(1)慢应该是内存等的问题吧,删除如果带条件没办法,只能DELETE,不过应该可以不写日志会快点
      

  3.   

    你是不带条件的删除?删除表的全部内容吗
    truncate table table_name
      

  4.   

    --只能批量的删除,下面执行一次是删除一百万,多执行几次
    declare
    n number;
    begin
    n:=100
    for i in 1..n loop
    delete from tb where 条件 and rownum<=10000;
    end loop;
    commit;
    end;
      

  5.   

    declare
    n number;
    begin
    n:=100;
    for i in 1..n loop
    delete from tb where 条件 and rownum<=10000;
    end loop;
    commit;
    end;
      

  6.   

    如果是delete 的话建议还是分批删除,
      

  7.   

    我现在就是准备进行数据转移,只保留最近1个月的数据,其它的放在按月份命名的表中,
    请给个SQL语句???
      

  8.   

    但是连:sleect count(1) from 表 t where t.checktime > 20100801  select * from 表 t where t.checktime > 20100801 这种样式的语句都似乎挂掉的样子,我都不敢执行 delete 语句了,怕怕
      

  9.   


    怎么导出法???用SQLSERVER 下的倒出工具吗?还是???
      

  10.   

    用EXP啊,这个用法在网上一搜一大片。1.7亿也不是很多,只要硬件不是太差,带索引的的查询也不会很慢,你把表分析下,应该会快很多。
      

  11.   

    今天测试了哈:表在字段 F_planid,F_checktime 建了索引( 1.7亿条记录量 ),pl/sql 中执行以下语句:-----------------------------------------------------------------------------
    select count(h.f_checktime) from t_tqc_locale_trend_his h                 1:485sselect count(1) from t_tqc_locale_trend_his h                             2:413sselect h.f_planid from t_Tqc_Locale_Trend_His h  where h.f_planid=49710   3:556sselect count(1) from t_Tqc_Locale_Trend_His h  where h.f_planid=49710   591s           
    这正常吗???
      

  12.   

    写一个excel导入导出库的小程序。
    先把所有的数据导出为excel。
    然后在excel中条件筛选后导入到你的新表。
    也就是不通过SQL筛选,就不会影响速率了。
      

  13.   

    导出估计也要花你不少时间的
    你不用导出了,直接建立新表,比如建立一个表emp,然后把你的表t_employeess复制过去,
    INSERT /*+ APPEND */ INTO emp NOLOGGING SELECT * FROM t_employess;COMMIT;
    复制好后你就可以对新建立的表进行操作,比如创建索引,删除不用的数据,REBUILD表等
    相信经过这些后你的查询速度会很快的。一般来说数据库用久了,经常插入删除的表的存储会比较混乱,常常需要我们手工去REBUID这些表
    当然如果你的数据结果设计本身就有问题,那没办法了别在繁忙的时候做这些事情哦
      

  14.   

    再补充下,索引的存储也可能会混乱,也一并REBUID下
    ALTER INDEX xxxx REBUILD ONLINE;
      

  15.   

    人家的ERP软件你以为没建立索引么?你们把人家做软件的想得太白菜了
      

  16.   

    不可能是1.7条,是不是科学计数法,你试试to_char一下看看
      

  17.   

    这是什么表阿?如果可以这样随便删除的话,重要性就不高了,控制一下,需要的才写入。
    最好分区。
    单纯想统计快点,可以考虑用oracle hint
      

  18.   

    写个while循环来删除,直到删除为止,删除之后为了防止有索引碎片,需要重建索引;
    如果存在分区的话,你可以根据分区来truncate掉表中的数据,如果分区上有全局索引的话,这时需要重建索引
    WHILE TRUE LOOP
        DELETE FROM 表名 t WHERE t.ROWNUM <=2000;
        IF SQL%ROWCOUNT = 0 THEN
          COMMIT;
          EXIT;
        END IF;
        COMMIT; 
    END LOOP;