如何创建、使用sql分区视图

如何创建、使用sql分区视图,第1张

分区视图:分区视图是通过对成员表使用union all所定义的视图

这些成员的结构相同,一般情况下,为分区视图具有如下语法:

create view vie_name

with schemabinding

as

select <select_list1>

from t1

union all

select <select_list2>

from t2

union all

select <select_listn>

from tn

分区视图的作用:用在一台或多台服务器水平连接一组成员表中的分区数据

使数据看起来就像来自一个表

DiskGenius给硬盘建立新分区方法如下:

情况一:在硬盘上的空闲区域建立新分区

1 在软件中选中空闲区域,然后点击“新建分区”按钮。

2 根据需要选择分区类型、文件系统等信息后点击“确定”按钮。

3 点击工具栏上的“保存更改”按钮,将分区保存。然后软件会提示将新建立的分区格式化,这时候点击“确定”按钮。

情况二:硬盘上已经有分区了,从已经建立的分区中划分出一个新分区。

1 选中硬盘上已经存在的分区并点击鼠标右键,选择“建立新分区”。

2 为新建的分区设置好位置与大小等信息后点击“开始”按钮,等待一会分区建立完成。

说明:从已有分区中建立新的分区,原理是将该分区拆分成2个分区;此方法不会影响现有数据。

create table xxx(id number,time date)

parttion by range(time)

(partion part1 values less than (to_date('2012-01-31','yyyy-mm-dd')) tablespace tb1,

partion part 2 vales less than(to_date('2012-01-31','yyyy-mm-dd')) tablespace tb2);

CREATE TABLE lineitem(l_orderkey DECIMAL(10,0) NOT NULL, l_cpartkey INTEGER, l_suppkey INTEGER, l_linenumber INTEGER, l_quantity DECIMAL(12,2), l_extendedprice DECIMAL(12,2), l_discount DECIMAL(12,2), l_tax DECIMAL(12,2), l_returnflag CHAR(1), l_linestatus CHAR(1), l_shipdate DATE, l_commitdate DATE, l_receiptdate DATE, l_shipinstruct CHAR(25), l_shipmode CHAR(10), l_comment VARCHAR(44)) PARTITION BY RANGE(l_shipdate) (STARTING MINVALUE, STARTING '1/1/2000' ENDING '31/12/2020' EVERY 1 YEAR(按月就是 MONTH), ENDING MAXVALUE);

你需要指定分区的时间间隔,来作为数据库创建分区的依据,命令如下:

CREATE TABLE dnslog(userip varchar(20),request_domains varchar(255),datetime date,a_record varchar(20),rcode int2,dns_type int2,cname varchar(255),aaaa_record varchar(180),dns_server varchar(255),request_domains_owner varchar(255),dns_server_owner varchar(255))distributed by (userip,dns_server)PARTITION BY RANGE (datetime)

( START (date '2008-01-01') INCLUSIVE

END (date '2016-01-01') EXCLUSIVE

EVERY (INTERVAL '1 year') );

你可以根据你表中数据的最小值,确定分区开始的时间 ,INCLUSIVE 表示包含 “2008-01-01” 这天,根据具体的分区情况确定分区结束的时间,EXCLUSIVE 表示不包含“2016-01-01” ,具体情况根据你的数据来确定。

EVERY (INTERVAL '1 year') 表示分区的时间间隔可以是 ‘1 year’一年,‘1 month’ 一月,‘1 day’ 等。

在分区结束时间之后的分区,需要重新添加。或者做一个脚本自动生成之后的分区。

ql代码

#这里使用HASH表分区,mysql会根据HASH字段来自动分配数据到不同的表分区,这种情况适用于没有表分区规则但是有需要分表来进行查询优化的情况。这里根据id字段hash规则创建2个表分区

CREATE TABLE `creater_bak` (

`id` int(11) NOT NULL,

`name` varchar(100) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

PARTITION BY HASH(id) PARTITIONS 2

创建完成后开始导入原表数据:

Sql代码

insert into creater_bak select from creater;

导入以后的新表数据就是分布在不同的2个表分区中了。

如果数据量非常大,觉得预设的表分区数量太少,那么可以新增表分区,mysql会自动重新分配:

Sql代码

#这里新增8个表分区,加上新建表时候的2个,一共10个表分区了

ALTER TABLE `creater_bak` ADD PARTITION PA

关于zabbix和MySQL分区表

-

支持zabbix

20和22,mysql在有外键的表不支持分区表。在zabbix

20和22中history和trend表没有使用外键,因此是可以在这些表中做分区的。

Index

changes:

1如果zabbix的数据库已经有了数据,更改索引可能需要一些时间,根据具体的数据量,需要的时间长短也不一样。

2在某些版本的MySQL索引的改变会使整个表上读锁。貌似mysql

56没有这个限制。

所述第一步骤是修改几个索引以允许做分区,按照下面的命令:

mysql>

Alter

table

history_text

drop

primary

key,

add

index

(id),

drop

index

history_text_2,

add

index

history_text_2

(itemid,

id);

Query

OK,

0

rows

affected

(049

sec)

Records:

0

Duplicates:

0

Warnings:

0

mysql>

Alter

table

history_log

drop

primary

key,

add

index

(id),

drop

index

history_log_2,

add

index

history_log_2

(itemid,

id);

Query

OK,

0

rows

affected

(271

sec)

Records:

0

Duplicates:

0

Warnings:

0

Stored

Procedures:

下面开始填写存储过程,需要执行下面的几个存储过程语句,只要能看到"Query

OK,

0

rows

affected

(000

sec)"只能就没有什么问题了。

以上就是关于如何创建、使用sql分区视图全部的内容,包括:如何创建、使用sql分区视图、如何使用DiskGenius给硬盘建立新分区、如何使用SQLServer数据库按月创建表分区等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存