TiDB是一款分布式关系型数据库,支持多种表类型,其中包括普通表和分区表。如果需要将普通表转换为分区表,可以按照以下步骤进行 *** 作:
第一步:创建分区表。在创建分区表时,需要使用CREATE TABLE语句,并设置分区键和分区方式。分区键是用来确定每个分区的依据,分区方式则是指定如何对分区键进行划分。
第二步:将普通表数据导入分区表。这里可以使用INSERT INTO语句将数据从普通表中导入到分区表中。请注意,分区表中的每个分区都需要手动创建,并且必须按照分区键的要求进行划分。
第三步:修改应用程序。因为分区表的结构和普通表不同,所以需要修改应用程序以适应新的表结构。
总之,将TiDB普通表转换为分区表需要按照以上步骤进行 *** 作,以确保数据的完整性和正确性。
--这个在mssql2008+,可以创建表分区,不用创建100多个表
--你在增删改查 *** 作的时候跟单个表是一样的
--但是你的数据 *** 作有明显的分段的话,效率会大大提高
--以下从创建文件,创建分区表,到查询删除等
--谢谢
--1创建文件组
ALTER DATABASE TEST
ADD FILEGROUP FILEGROUP1
ALTER DATABASE TEST
ADD FILEGROUP FILEGROUP2
ALTER DATABASE TEST
ADD FILEGROUP FILEGROUP3
--2添加文件
ALTER DATABASE TEST
ADD FILE (
NAME = N'FILE1',
FILENAME = N'E:\ERP\FILE1NDF' ,
SIZE = 3072KB ,
FILEGROWTH = 1024KB
)
TO FILEGROUP FILEGROUP1
ALTER DATABASE TEST
ADD FILE (
NAME = N'FILE2' ,
FILENAME = N'E:\ERP\FILE2NDF' ,
SIZE = 3072KB ,
FILEGROWTH = 1024KB
)
TO FILEGROUP FILEGROUP2
ALTER DATABASE TEST
ADD FILE (
NAME = N'FILE3' ,
FILENAME = N'E:\ERP\FILE3NDF' ,
SIZE = 3072KB ,
FILEGROWTH = 1024KB
)
TO FILEGROUP FILEGROUP3
--31创建分区函数
CREATE PARTITION FUNCTION FNPARTITION(INT)
AS RANGE RIGHT
FOR VALUES(333333333,666666666)
--41创建分区方案
CREATE PARTITION SCHEME SCHEMAFORPARIRION
AS PARTITION FNPARTITION
TO(FILEGROUP1,[PRIMARY],FILEGROUP2)
--42 添加文件组
ALTER PARTITION SCHEME SCHEMAFORPARIRION
NEXT USED FILEGROUP3;
--32拆分分区
ALTER PARTITION FUNCTION FNPARTITION ()
SPLIT RANGE (500);
--33合并分区
ALTER PARTITION FUNCTION FNPARTITION ()
MERGE RANGE (500);
--51新建分区表
CREATE TABLE ORDERRECORDS
(
ID INT
)
ON SCHEMAFORPARIRION(ID)
DROP TABLE ORDERRECORDS
--52普通表变为分区表
--如果原来就主键,先删除
ALTER TABLE ORDERRECORDS DROP CONSTRAINT PK_SALE
ALTER TABLE ORDERRECORDS ADD CONSTRAINT PK_SALE PRIMARY KEY
(
ID ASC
) ON SCHEMAFORPARIRION(ID)
--或者创建聚集索引,如果原来有主键,要先改成非聚集索引
ALTER TABLE ORDERRECORDS DROP CONSTRAINT PK_SALE
--创建主键,但不设为聚集索引
ALTER TABLE ORDERRECORDS ADD CONSTRAINT PK_SALE PRIMARY KEY NONCLUSTERED
(
ID ASC
) ON [PRIMARY]
CREATE CLUSTERED INDEX CT_SALE ON ORDERRECORDS(ID)
ON PARTSCHSALE(ID)
--53分区表变为普通表
ALTER TABLE ORDERRECORDS DROP CONSTRAINT PK_SALE
ALTER TABLE ORDERRECORDS ADD CONSTRAINT PK_SALE PRIMARY KEY
(
ID ASC
) ON [PRIMARY]
--或者删除
DROP INDEX CT_SALE ON ORDERRECORDS
--6删除分区方案
DROP PARTITION SCHEME SCHEMAFORPARIRION
--7删除分区函数
DROP PARTITION FUNCTION FNPARTITION
--8删除文件
ALTER DATABASE TEST REMOVE FILE FILE1
ALTER DATABASE TEST REMOVE FILE FILE2
ALTER DATABASE TEST REMOVE FILE FILE3
--9删除文件组
ALTER DATABASE TEST REMOVE FILEGROUP FILEGROUP1
ALTER DATABASE TEST REMOVE FILEGROUP FILEGROUP2
ALTER DATABASE TEST REMOVE FILEGROUP FILEGROUP3
--10查看分区函数
SELECT FROM SYSPARTITION_FUNCTIONS
SELECT FROM SYSPARTITION_RANGE_VALUES
SELECT FROM SYSPARTITION_SCHEMES
--11查看每个分区的数据
SELECT FROM ORDERRECORDS WHERE $PARTITIONFNPARTITION(ID)=4
--12查看分区对应的文件
SELECT FGNAME
FROM SYSDESTINATION_DATA_SPACES SP
INNER JOIN SYSPARTITION_SCHEMES SCM ON SPPARTITION_SCHEME_ID = SCMDATA_SPACE_ID
INNER JOIN SYSFILEGROUPS FG ON FGDATA_SPACE_ID = SPDATA_SPACE_ID
WHERE SCMNAME='SCHEMAFORPARIRION' AND SPDESTINATION_ID=4
如果有时间字段,建议做分区表,按时间分区,这样表从物理上是分开的,但是对外还是一张表
好处有1原本的代码结构不用变2查询历史数据的时候,速度仍然有保障3如果建立触发器进行自动分区,理论上不管再用多少年,都不会再需要重新建表a2了
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);
以上就是关于tidb普通表转为分区表全部的内容,包括:tidb普通表转为分区表、你好,请教数据库的问题、sqlserver数据库很大,建立分表能否提升查询速度等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)