关于表的索引创建序列以及表分区的创建

it2022-05-05  180

今天查询5千万条数据的数据库 在此记录一下

给表加入序列方法

首先创建序列 S_QUERYUSERS_PRIMARYKEY1 给序列起的名字

CREATE SEQUENCE S_QUERYUSERS_PRIMARYKEY1 MINVALUE 1 ----序列最小值 NOMAXVALUE ----不设置最大值 无上限 START WITH 1 ----从1开始计数 INCREMENT BY 1 ----每次加1 NOCYCLE -----一直列加 不循环 NOCACHE; ----不建立缓冲区

创建触发器实现数据插入时触发主键自动增长

S_QUERYUSERS_TRIGGER 自己起名 QUERYUSERS 表名 (NEW.ID IS NULL) 中的ID为表中字段 S_QUERYUSERS_PRIMARYKEY1 创建的序列名

CREATE OR REPLACE TRIGGER S_QUERYUSERS_TRIGGER BEFORE INSERT ON QUERYUSERS FOR EACH ROW WHEN(NEW.ID IS NULL) BEGIN SELECT S_QUERYUSERS_PRIMARYKEY1.NEXTVAL INTO:NEW.IDFROM dual; END;

之后就可以添加数据测试了

删除序列

DROP SEQUENCE 序列名;

索引的创建 提高搜索速度

create index s_queryusers on QUERYUSERS(NAME);

QUERYUSERS 表名 NAME 要加入索引的字段名

确实能提升很多 没加入索引之前 5千万条数据的条件查询需要5-6秒 加入索引之后只需要1秒左右

表分区的创建 可以提高效率

创建表结构 PARTITION BY RANGE (ID) — 根据ID分区 LIU_DATA_QUERYUSERS1 — 表空间 THAN (10000000) ------------------存放1千万条数据

CREATE TABLE QUERYUSERS01 ( "ID" NUMBER NOT NULL , "NAME" VARCHAR2(255) , "SEX" VARCHAR2(255) , "AGE" NUMBER , "ADDRESS" VARCHAR2(255) , "USERID" NUMBER , PRIMARY KEY ("ID") ) PARTITION BY RANGE (ID) ( PARTITION QUERYUSERS1 VALUES LESS THAN (10000000) TABLESPACE LIU_DATA_QUERYUSERS1, PARTITION QUERYUSERS2 VALUES LESS THAN (20000000) TABLESPACE LIU_DATA_QUERYUSERS2, PARTITION QUERYUSERS3 VALUES LESS THAN (30000000) TABLESPACE LIU_DATA_QUERYUSERS3, PARTITION QUERYUSERS4 VALUES LESS THAN (40000000) TABLESPACE LIU_DATA_QUERYUSERS4, PARTITION QUERYUSERS5 VALUES LESS THAN (50000000) TABLESPACE LIU_DATA_QUERYUSERS5 )

这个表分区暂时没用到 先记下 有机会尝试一下 5千万条数据 导入导出太耗时间了


最新回复(0)