mysql表在线转成分区表_11g普通表在线转换分区表
本帖最后由 燈和樹 于 2016-5-4 14:58 編輯
由于業務系統數據量增大,對其用戶表在線完成分區表轉換過程,記錄如下,11g數據庫支持。創建過渡分區表
根據USER_ID創建分區表
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加大,默認為10
)
tablespace TS_TEST_BIG_SEGMENT
pctfree 20;---增加pctfree在線轉換普通表為分區表
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成功不需要執行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創建分區表的索引創建全局分區主鍵
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;創建非前綴本地分區
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;
注意:提示執行索引的語句中必須使用表的別名
索引名前不需要加模式
select /*+index(seg IDX_USER_UPDATE_TIME)*/
seg.*
from SDP_SMECD.T_USER seg
where update_time > sysdate - 130
and update_time < sysdate - 100;
分區表update_time索引和普通表的update_time索引I/O吞吐率相差無幾。
而且如果在DATE日期上面創建索引,范圍稍微大點,數據庫會默認選擇全表掃描。
總結
以上是生活随笔為你收集整理的mysql表在线转成分区表_11g普通表在线转换分区表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 图片转文字错误_pytho
- 下一篇: peewee mysql_scrapy中