ORACEL 大数据表 加快查询速度方案 总结

1、前提介绍:大数据表记录为 1000万条数据以上

2、方案介绍:

     在oracle查询的sql中 1.不要连表查,尽量在一张表中把所有需要的字段都查出来

                                    2.在where 语句=号左面不要用oracle的函数,不然oracle的索引等就无效了

                                   3.尽量不要用like 查询,否则速度也会很慢

                                   4.需要自己拼 oracle 的分页查询语句,否则可能也会比较慢

                                      例子:

                                            select  *  from

                                            (select  t.pk_id as id from 表名 t where 1 = 1  and ROWNUM <= '25')

                                            where  RN >= '1'

                                  5.在查询条件的列中加入索引

                   ---------------------------------------------------------------------------------------------------------------------------------

                              在以上方法都没有满足要求的时候,可以使用oracle的分区表功能

                   方法:

                               1.建表  再建分区表   (下面语句是 用create_date列的,每个月会新建一个分区)

                               DROP TABLE表名;
                              CREATE TABLE 表名
                              (
                                  PK_ID  VARCHAR2(32) NOT NULL,
                                 DEL_FLAG  VARCHAR(1)  NOT NULL ,
                                CREATE_USER  VARCHAR(50)  NOT NULL ,
                                 CREATE_DATE  DATE  NOT NULL ,
                                UPDATE_USER  VARCHAR(50)  ,
                                 UPDATE_DATE  DATE ,
                                REMARK  VARCHAR2(2000)  ,
                               CONSTRAINT PK_TT_CELL PRIMARY KEY (PK_ID)
                              )
                                  partition by range (create_date)
                              interval (numtoyminterval(1,'MONTH'))
                              (
                                   partition p07001 values less than (to_date('2010-02-01 00:00:00','YYYY-MM-DD hh24:mi:ss'))
                              );
                             COMMENT ON TABLE 表名 IS '**表';
                             COMMENT ON COLUMN TT_CELL.PK_ID IS '主键ID';
                            COMMENT ON COLUMN TT_CELL.REMARK IS '备注';

                            2.有关分区表的相关sql

                              select partition_name, high_value from user_tab_partitions where table_name = 'SALES6';  -- 查询某张表下的所有分区表

                             alter table sales6 drop partition SYS_P25;  -- 删除某张表下的某个分区表  (数据也会同步删除)

                             select * from sales6 partition(SYS_P30); --查询某个分区表下的数据

总结:以上的方法都用下来,查询速度应该会加快的(暂时先总结这么多)

附上一次插入100万条数据的sql

--建造序列

Create sequence seq_cell_code
Increment by 1
Start with 1
NOMAXVALUE   
Minvalue 1
Nocycle
nocache

select seq_cell_code.nextval from dual; – 测试序列
--进行插入100万条数据
begin
    for i in 1..1000000 loop
    Insert into sales6
       (sales_id, sales_dt)
     Values
       (seq_cell_code.nextval, to_date('2008-12-31 7:52:10','YYYY-MM-DD hh24:mi:ss'));
    end loop;
end;

你可能感兴趣的:(ORACLE)