什么是分表和分区 MySql数据库分区和分表方法

什么是分表和分区 MySql数据库分区和分表方法,第1张

分表是将一个大表按照一定的规则分解成多张具有独立存储空间的实体表,我们可以称为子表,每个表都对应三个文件,MYD数据文件,MYI索引文件,frm表结构文件。这些子表可以分布在同一块磁盘上,也可以在不同的机器上。app读写的时候根据事先定义好的规则得到对应的子表名,然后去 *** 作它。

Oracle的分区可以分为:列表分区、范围分区、散列分区、复合分区。

1、增强可用性:如果表的一个分区由于系统故障而不能使用,表的其余好的分区仍可以使用;

2、减少关闭时间:如果系统故障只影响表的一部分分区,那么只有这部分分区需要修复,可能比整个大表修复花的时间更少;

3、维护轻松:如果需要建表,独自管理每个公区比管理单个大表要轻松得多;

4、均衡I/O:可以把表的不同分区分配到不同的磁盘来平衡I/O改善性能;

5、改善性能:对大表的查询、增加、修改等 *** 作可以分解到表的不同分区来并行执行,可使运行速度更快;

6、分区对用户透明:最终用户感觉不到分区的存在。

热血江湖数据库分区按以下步骤设置。

1、下载SQLSERVER。

2、安装程序选择SQL2000组件,安装数据库服务器。

3、下一步本地计算机一直默认下一步到选择本地系统用户,选择混合模式默认用户名SA填写密码。

4、填写完密码即可进入服务器设置分区。

Use MasterGosp_configure 'allow updates', 1

reconfigure with overrideGo然后update sysdatabases set status = 32768 where name = '<db_name'

先把SQL Server 重新启动一下,然后检查你的数据库吧。

先设置成单用户模式,然后做dbcc

sp_dboption '<db_name', 'single user', 'true'

DBCC CHECKDB('<db_name')

把数据库状态改回去了,记得别忘了把系统表的修改选项关掉。

update sysdatabases set status = 28 where name = '<db_name' --当然你的数据库状态可能不是这个,自己改为合适的值吧。也可以用sp_resetstatusgosp_configure 'allow updates', 0

reconfigure with override

关闭SQL SERVER,然后重启,观察一下数据库状态是否正常,如果正常,一切万事大吉,如果数据库处于置疑状态。重新上面的步骤,注意将数据库名称更改为其他名字,恢复后不要关闭SQL SERVER,然后新建一个与原来数据库名称一样的数据库,然后耐心的将恢复得到的数据库中所有的表、视图、函数、存储过程(不包括系统内部的),复制到新建的数据库,要有耐心,特别要注意有相关性的表、视图、函数、存储过程等的复制先后次序,否则会复制失败的。

一般语法:

create table t_test (

   pk_id number(30) not null,

  add_date_time  DATE,

   constraintPK_T_TEST primary key (pk_id)

)

PARTITION BY RANGE (add_date_time)

(

  PARTITIONt_test_2013_less VALUES LESS THAN (TO_DATE('2013-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,

  PARTITIONt_test_2013 VALUES LESS THAN (TO_DATE('2014-01-01 00:00:00','yyyy-mm-ddhh24:mi:ss')) TABLESPACE TS_MISPS,

  PARTITION t_test_2014VALUES LESS THAN (TO_DATE('2015-01-01 00:00:00','yyyy-mm-dd hh24:mi:ss'))TABLESPACE TS_MISPS

);

需要看是否是全局索引。

如果是全局索引,是需要重建,如果是本地分区索引,还可以继续使用。

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

1 组合分区表的创建方式("范围-哈稀"),见附1

2 楼主的需求,即"范围-范围分区",在ORACLE 9i, 10g经过测试都是不能实现的

在附1的基础上修改为"范围-范围"组合分区,创建时报错:ORA-14151:无效的表分区方法

3 关于sxdtgsh兄的回答,我测了

31 没有maxvalue上限分区设置,在插入超出分区的数据时会报错ORA-14400: 插入的分区关键字未映射到任何分区

32 按回答的语句创建分区表没有问题,但数据无法按照楼主的需求分布

====附1

附录:创建"范围-哈稀"组合分区表

CREATE TABLE TAB11 (ID NUMBER,DT DATE)

PARTITION BY RANGE (DT)

SUBPARTITION BY HASH (ID) SUBPARTITIONS 2 -- 自分区个数,可以不写,由系统判断

(

PARTITION Y2012 VALUES LESS THAN (TO_DATE('2013-01-01','YYYY-MM-DD'))

(

SUBPARTITION Y2012_H1

,SUBPARTITION Y2012_H2

)

,PARTITION Y2013 VALUES LESS THAN (TO_DATE('2014-01-01','YYYY-MM-DD'))

(

SUBPARTITION Y2013_H1

,SUBPARTITION Y2013_H2

)

,PARTITION YMAX VALUES LESS THAN (MAXVALUE)

(

SUBPARTITION YMAX_H1

,SUBPARTITION YMAX_H2

)

)

====附2,请楼主检查最后查询的数据分布

create table T_TEST

(

ID NUMBER(20) NOT NULL,

TIME DATE NOT NULL

)

partition by range(TIME, ID) -- 按时间、ID范围分区 这个例子是按年的

(

partition P_2012_10 values less than (to_date('2013-01-01','yyyy-MM-dd'), 10),

partition P_2012_20 values less than (to_date('2013-01-01','yyyy-MM-dd'), 20),

partition P_2012_MAX values less than (to_date('2013-01-01','yyyy-MM-dd'), MAXVALUE),

partition P_2013_10 values less than (to_date('2014-01-01','yyyy-MM-dd'), 10),

partition P_2013_20 values less than (to_date('2014-01-01','yyyy-MM-dd'), 20),

partition P_2013_MAX values less than (to_date('2014-01-01','yyyy-MM-dd'), MAXVALUE),

partition P_MAX values less than (MAXVALUE,MAXVALUE)

);

INSERT INTO T_TEST VALUES (1,TO_DATE('20121204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (12,TO_DATE('20121204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (32,TO_DATE('20121204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (2,TO_DATE('20131204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (12,TO_DATE('20131204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (33,TO_DATE('20131204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (3,TO_DATE('20141204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (23,TO_DATE('20141204 00:00:00','YYYYMMDD HH24:MI:SS'));

INSERT INTO T_TEST VALUES (43,TO_DATE('20151204 00:00:00','YYYYMMDD HH24:MI:SS'));

SELECT FROM T_TEST;

SELECT FROM T_TEST PARTITION(P_2012_10);

SELECT FROM T_TEST PARTITION(P_2012_20);

SELECT FROM T_TEST PARTITION(P_2012_MAX);

SELECT FROM T_TEST PARTITION(P_2013_10);

SELECT FROM T_TEST PARTITION(P_2013_20);

SELECT FROM T_TEST PARTITION(P_2013_MAX);

SELECT FROM T_TEST PARTITION(P_MAX);

以上就是关于什么是分表和分区 MySql数据库分区和分表方法全部的内容,包括:什么是分表和分区 MySql数据库分区和分表方法、Oracle分区是怎样优化数据库的、热血江湖数据库分区怎么设置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9495429.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存