mysql表在线转成分区表_11g普通表在线转换分区表
本帖最后由 燈和樹(shù) 于 2016-5-4 14:58 編輯
由于業(yè)務(wù)系統(tǒng)數(shù)據(jù)量增大,對(duì)其用戶表在線完成分區(qū)表轉(zhuǎn)換過(guò)程,記錄如下,11g數(shù)據(jù)庫(kù)支持。創(chuàng)建過(guò)渡分區(qū)表
根據(jù)USER_ID創(chuàng)建分區(qū)表
CREATE TABLE SDP_SMECD.TEST_T_USER_ID
(
USER_ID? ?? ?? ?? ?NUMBER(13) not null,
SUBSCRIBER_ID? ?? ?VARCHAR2(100),
SMARTCARD_ID? ?? ? VARCHAR2(100),
TVCODE? ?? ?? ?? ? VARCHAR2(32),
STB_SEQID? ?? ?? ? NUMBER(13),
PASSWORD? ?? ?? ???VARCHAR2(20),
REGION_CODE? ?? ???VARCHAR2(32),
USER_CODE? ?? ?? ? VARCHAR2(100) not null,
USER_NAME? ?? ?? ? VARCHAR2(200),
USER_ALIAS? ?? ?? ?VARCHAR2(100),
REGISTER_TIME? ?? ?DATE,
STATUS? ?? ?? ?? ? VARCHAR2(2) not null,
TOKEN? ?? ?? ?? ???VARCHAR2(32),
BUSINESS_AREA_CODE VARCHAR2(8),
SERV_TYPES? ?? ?? ?CHAR(10) not null,
CREDIT_GRADE? ?? ? VARCHAR2(2),
CREDIT? ?? ?? ?? ? NUMBER(8),
USER_LEVEL? ?? ?? ?VARCHAR2(2),
PAY_TYPE? ?? ?? ???NUMBER(2),
REMAIN_CREDIT? ?? ?NUMBER(8),
USER_CLASS? ?? ?? ?NUMBER(2) not null,
STB_SN? ?? ?? ?? ? VARCHAR2(32),
IMS_ACCOUNT? ?? ???VARCHAR2(20),
BIND_USER_ID? ?? ? NUMBER(13),
USER_TYPE? ?? ?? ? NUMBER(2),
USER_OWNER? ?? ?? ?NUMBER(2),
UPDATE_TIME? ?? ???DATE,
BOSS_AREACODE? ?? ?VARCHAR2(15),
VIDEO_TYPE? ?? ?? ?VARCHAR2(150)
)
PARTITION by RANGE(user_id)
INTERVAL (2000000)
(
PARTITION TEST_T_USER_UPT_PARTP1 VALUES LESS THAN (3877397)
tablespace TS_TEST_BIG_SEGMENT
pctfree 20? ? ---增加pctfree,表update較頻繁,故pctfree加大,默認(rèn)為10
)
tablespace TS_TEST_BIG_SEGMENT
pctfree 20;---增加pctfree在線轉(zhuǎn)換普通表為分區(qū)表
exec dbms_redefinition.can_redef_table('SDP_SMECD','TEST_T_USER');
exec dbms_redefinition.start_redef_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID');
--220s
--如果start成功不需要執(zhí)行abort
exec dbms_redefinition.abort_redef_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID');
exec dbms_redefinition.sync_interim_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID');? ?--14s
exec dbms_redefinition.finish_redef_table('SDP_SMECD', 'TEST_T_USER', 'TEST_T_USER_ID'); -1s創(chuàng)建分區(qū)表的索引創(chuàng)建全局分區(qū)主鍵
alter table SDP_SMECD.TEST_T_USER
add constraint PK_TEST_T_USER_USERID primary key (USER_ID)
using index local
tablespace TS_TEST_BIG_SEGMENT
pctfree 10;創(chuàng)建非前綴本地分區(qū)
create index??SDP_SMECD.IND_TEST_T_USER_UPT ON SDP_SMECD.TEST_T_USER(update_time) local
tablespace TS_TEST_BIG_SEGMENT
pctfree 20;
select /*+index(seg IDX_USER_UPDATE_TIME)*/
seg.*
from SDP_SMECD.TEST_T_USER seg
where update_time > sysdate - 130
and update_time < sysdate - 100;
注意:提示執(zhí)行索引的語(yǔ)句中必須使用表的別名
索引名前不需要加模式
select /*+index(seg IDX_USER_UPDATE_TIME)*/
seg.*
from SDP_SMECD.T_USER seg
where update_time > sysdate - 130
and update_time < sysdate - 100;
分區(qū)表update_time索引和普通表的update_time索引I/O吞吐率相差無(wú)幾。
而且如果在DATE日期上面創(chuàng)建索引,范圍稍微大點(diǎn),數(shù)據(jù)庫(kù)會(huì)默認(rèn)選擇全表掃描。
總結(jié)
以上是生活随笔為你收集整理的mysql表在线转成分区表_11g普通表在线转换分区表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python 图片转文字错误_pytho
- 下一篇: 蓝牙芯片排行_7月TWS 全球品牌出货量