数据库分区处理

如果一张表的数据量太大的话,myd、myi就会变得很大,查找数据就会变的很慢,我接触到的是有关温州出租车网约车GPS数据量的查询,大概数据量为1天4000万条记录,不分区查询速度慢到怀疑人生。在物理上我们可以把数据表分割成不同的小块,查找数据只需要查找需要的那一块数据即可,查询速度大大提升。

我们项目中我只用到了rang分区:
参考mysql分区

range分区

自动分区
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
create table cb03_cbrfid(
ZWMC  VARCHAR2(50),
DTID  VARCHAR2(50),
RFID  VARCHAR2(50),
CBSBH  VARCHAR2(50),
CBLX  VARCHAR2(50),
NUM  NUMBER(10),
ZDW  VARCHAR2(50) ,
SJ  DATE ,
ZZZ  VARCHAR2(50) ,
ZZXCG  VARCHAR2(50),
JD  NUMBER(19,16),
WD  NUMBER(19,16),
WZ  VARCHAR2(50),
RESERVED1  FLOAT(8),     
RESERVED2  FLOAT(8),    
XXLX  INTEGER ,
GXSJ  DATE )
 partition by range(gxsj)
  interval(numtodsinterval(1,'day'))
  ( partition cbrfid1 values less than(to_date('2017-10-15 00:00:00','yyyy-mm-dd hh24:mi:ss')));

具体的操作:

1
2
3
4
partition by range (字段名)
(
partition 分区名 values less than (TO_DATE(' 2014-07-25 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
);

手动分区
1
alter table 表名 add partition 分区名 values less than (TO_DATE(' 2014-07-27 00:00:00, 'SYYYY-MM-DD HH24:MI:SS'))

最后分区示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
create table T_WYC_GPS_HISTORY
(
vehicle_no VARCHAR2(20),
vehicle_color VARCHAR2(8),
alarm_id VARCHAR2(32),
status VARCHAR2(32),
lat VARCHAR2(32),
lon VARCHAR2(32),
speed VARCHAR2(16),
direction VARCHAR2(8),
geometry MDSYS.SDO_GEOMETRY,
load_time DATE,
pre_geohash VARCHAR2(20),
last_geohash VARCHAR2(20),
platform_id INTEGER
)
partition by range (LOAD_TIME)
(
partition T_WYC_GPS_HISTORY_20180226 values less than (TO_DATE(' 2018-02-27 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace WZYG_WYC_GPS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8M
next 1M
minextents 1
maxextents unlimited
),
partition T_WYC_GPS_HISTORY_20180227 values less than (TO_DATE(' 2018-02-28 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8M
next 1M
minextents 1
maxextents unlimited
),
partition T_WYC_GPS_HISTORY_20180228 values less than (TO_DATE(' 2018-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 8M
next 1M
minextents 1
maxextents unlimited
),