2017-02-15 6 views
2

j'ai créé la base de donnéesordre incorrect des partitions de SQL Server

USE [master] 
GO 

CREATE DATABASE [testdb] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N'testdb', FILENAME = N'D:\MSSQL\Data\testdb.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2016] 
(NAME = N'2016', FILENAME = N'D:\MSSQL\Data\2016.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2017] 
(NAME = N'2017', FILENAME = N'D:\MSSQL\Data\2017.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2018] 
(NAME = N'2018', FILENAME = N'D:\MSSQL\Data\2018.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2019] 
(NAME = N'2019', FILENAME = N'D:\MSSQL\Data\2019.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB), 
FILEGROUP [2020] 
(NAME = N'2020', FILENAME = N'D:\MSSQL\Data\2020.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) 
LOG ON 
(NAME = N'testdb_log', FILENAME = N'D:\MSSQL\Data\testdb_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB) 
GO 
ALTER DATABASE [testdb] SET COMPATIBILITY_LEVEL = 130 
GO 

J'ai une table

CREATE TABLE [dbo].[ticket2](
    [id] [int] NULL, 
    [datesell] [datetime] NULL, 
    [status] [int] NULL 
) ON [PRIMARY] 
GO 

Ensuite, j'ai ajouté des partitions pour cette table

USE [testdb] 
GO 

BEGIN TRANSACTION 
CREATE PARTITION FUNCTION [byYear](datetime) AS RANGE LEFT FOR VALUES (N'2015-12-31T23:59:59', N'2017-01-01T00:00:00', N'2018-01-01T00:00:00', N'2019-01-01T00:00:00', N'2020-01-01T00:00:00') 

CREATE PARTITION SCHEME [years] AS PARTITION [byYear] TO ([PRIMARY], [2016], [2017], [2018], [2019], [2020]) 

CREATE CLUSTERED INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 
(
    [datesell] 
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [years]([datesell]) 

DROP INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 

COMMIT TRANSACTION 
GO 

Quand, je ajouter des données dans ma table, je vois la prochaine Data in partitions

Ensuite, je l'ai ajouté une partition pour l'année prochaine

ALTER DATABASE testdb 
ADD FILEGROUP [2021] 

ALTER DATABASE testdb 
ADD FILE 
(NAME = N'2021', FILENAME = N'D:\MSSQL\Data\2021.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) TO FILEGROUP [2021] 

ALTER PARTITION SCHEME [years] NEXT USED [2021]; 
ALTER PARTITION FUNCTION byYear() split RANGE (N'2022-01-01T00:00:00') 

BEGIN TRANSACTION 
CREATE CLUSTERED INDEX [ClusteredIndex_on_years_636227647501414735] ON [dbo].[ticket2] 
(
    [datesell] 
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [years]([datesell]) 
DROP INDEX [ClusteredIndex_on_years_636227647501414735] ON [dbo].[ticket2] 
COMMIT TRANSACTION 

Et je vois commande partitions mal. La partition 2020 est toujours la dernière, mais la dernière partition doit être 2021. Et toutes les données dont la date de vente est supérieure à 01/01/2022 seront dans la partition 2020, mais je m'attendais à les voir dans la partition 2021.

Pourquoi c'est ainsi?

Répondre

0

Vous ne trouvez pas le N'2021-01-01T00: 00: 00 'pour Partition 2020?

USE [testdb] 
GO 

BEGIN TRANSACTION 
CREATE PARTITION FUNCTION [byYear](datetime) AS RANGE LEFT FOR VALUES (N'2015-12-31T23:59:59', N'2017-01-01T00:00:00', N'2018-01-01T00:00:00', N'2019-01-01T00:00:00', N'2020-01-01T00:00:00', N'2021-01-01T00:00:00') 

CREATE PARTITION SCHEME [years] AS PARTITION [byYear] TO ([PRIMARY], [2016], [2017], [2018], [2019], [2020]) 

CREATE CLUSTERED INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 
(
    [datesell] 
)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF) ON [years]([datesell]) 

DROP INDEX [ClusteredIndex_on_years_636227525068063988] ON [dbo].[ticket2] 

COMMIT TRANSACTION 
GO 
+0

No. S'il vous plaît, jetez un oeil à cette image pour mieux comprendre mon idée http://ybex.com/d/2vnbd727moz9cq5g8uoiispla9j02wp8mmyz8147.html – Ivanoff