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
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?
No. S'il vous plaît, jetez un oeil à cette image pour mieux comprendre mon idée http://ybex.com/d/2vnbd727moz9cq5g8uoiispla9j02wp8mmyz8147.html – Ivanoff