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;