Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Du kan skapa en partitionerad tabell eller ett index i SQL Server, Azure SQL Database och Azure SQL Managed Instance med hjälp av SQL Server Management Studio eller Transact-SQL. Data i partitionerade tabeller och index är horisontellt indelade i enheter som kan spridas över mer än en filgrupp i en databas eller lagras i en enda filgrupp. Partitionering kan göra stora tabeller och index mer hanterbara och skalbara.
Att skapa en partitionerad tabell eller ett index sker vanligtvis i tre eller fyra delar:
Du kan också skapa en filgrupp eller filgrupper och motsvarande datafiler som innehåller de partitioner som anges av partitionsschemat. Den främsta anledningen till att placera partitioner på flera filgrupper är att se till att du oberoende kan utföra säkerhetskopierings- och återställningsåtgärder i filgrupper. Om detta inte krävs kan du välja att tilldela alla partitioner till en enda filgrupp, antingen med hjälp av en befintlig filgrupp, till exempel
PRIMARY
eller en ny filgrupp med relaterade datafiler. I nästan alla scenarier får du alla fördelar med att partitionera oavsett om du använder flera filgrupper eller inte.Skapa en partitionsfunktion som mappar raderna i en tabell eller ett index till partitioner baserat på värdena för en angiven kolumn. Du kan använda en enskild partitionsfunktion för att partitionering av flera objekt.
Skapa ett partitionsschema som mappar partitionerna i en partitionerad tabell eller ett index till en filgrupp eller till flera filgrupper. Du kan använda ett enda partitionsschema för att partitionering av flera objekt.
Skapa eller ändra en tabell eller ett index och ange partitionsschemat som lagringsplats, tillsammans med kolumnen som ska fungera som partitioneringskolumn.
Anteckning
Partitionering stöds fullt ut i Azure SQL Database. Eftersom endast PRIMARY
-filgruppen stöds i Azure SQL Database måste alla partitioner placeras i PRIMARY
-filgruppen.
Tabellpartitionering är också tillgängligt i dedikerade SQL-pooler i Azure Synapse Analytics, med vissa syntaxskillnader. Läs mer i Partitioneringstabeller i dedikerade SQL-pooler.
Behörigheter
För att skapa en partitionerad tabell krävs behörigheten SKAPA TABELL i databasen och ALTER-behörighet för schemat där tabellen skapas. För att skapa ett partitionerat index krävs ALTER-behörighet i tabellen eller vyn där indexet skapas. Om du skapar antingen en partitionerad tabell eller ett index krävs någon av följande ytterligare behörigheter:
ÄNDRA ALLA DATASPACE-behörigheter. Den här behörigheten är standard för medlemmar i sysadmin fast serverroll och db_owner och db_ddladmin fasta databasroller.
KONTROLL- eller ALTER-behörighet för databasen där partitionsfunktionen och partitionsschemat skapas.
CONTROL SERVER eller ALTER ANY DATABASE-behörighet på servern för databasen där partitionsfunktionen och partitionsschemat skapas.
Skapa en partitionerad tabell i en filgrupp med Transact-SQL
Om du inte behöver utföra säkerhetskopierings- och återställningsåtgärder separat i filgrupper förenklar partitionering av en tabell med en enda filgrupp hanteringen av den partitionerade tabellen över tid.
Det här exemplet är lämpligt för Azure SQL Database, som inte har stöd för att lägga till filer och filgrupper. Tabellpartitionering stöds i Azure SQL Database genom att skapa partitioner i PRIMARY
filgrupp. För SQL Server och Azure SQL Managed Instance kanske du vill ange en användarskapad filgrupp, beroende på dina metoder för filgrupps- och filhantering.
Exemplet går igenom att skapa en partitionerad tabell i SQL Server Management Studio (SSMS) med hjälp av Transact-SQL och tilldelar alla partitioner till PRIMARY
fil-grupp. Exemplet:
- Skapar en RANGE RIGHT-partitionsfunktion med namnet
myRangePF1
med tre gränsvärden med datatypen datetime2. Tre gränsvärden resulterar i en partitionerad tabell med fyra partitioner. - Skapar ett partitionsschema med namnet
myRangePS1
som använder syntaxenALL TO
för att tilldela alla partitioner imyRangePF1
partitionsfunktionen tillPRIMARY
-filgruppen. - Skapar en tabell med namnet
PartitionTable
i partitionsschematmyRangePS1
och anger en kolumn med namnetcol1
som partitioneringskolumn.
I Object Exploreransluter du till en instans av databasmotorn.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör. I det här exemplet skapas en partitionsfunktion och ett partitionsschema. En ny tabell skapas med partitionsschemat angivet som lagringsplats.
CREATE PARTITION FUNCTION myRangePF1 (datetime2(0))
AS RANGE RIGHT FOR VALUES ('2022-04-01', '2022-05-01', '2022-06-01') ;
GO
CREATE PARTITION SCHEME myRangePS1
AS PARTITION myRangePF1
ALL TO ('PRIMARY') ;
GO
CREATE TABLE dbo.PartitionTable (col1 datetime2(0) PRIMARY KEY, col2 char(10))
ON myRangePS1 (col1) ;
GO
Skapa en partitionerad tabell i flera filgrupper med Transact-SQL
Följ stegen i det här avsnittet för att skapa en eller flera filgrupper, motsvarande filer och en partitionerad tabell med Transact-SQL i SSMS.
Både SQL Server och Azure SQL Managed Instance har stöd för att skapa filgrupper och filer. Azure SQL Managed Instance konfigurerar automatiskt sökvägen för alla databasfiler som lagts till, så kommandot ALTER DATABASE ADD FILE
i Azure SQL Managed Instance tillåter inte parametern FILENAME
. Azure SQL Database har endast stöd för att skapa partitionerade tabeller i PRIMARY
filgrupp. Hitta exempelkod för Azure SQL Database i Skapa en partitionerad tabell i en filgrupp med transact-SQL-.
Kör följande exempel mot en tom databas. Exemplet:
- Lägger till fyra nya filgrupper i en databas.
- Lägger till en fil i varje filgrupp.
- Skapar en RANGE RIGHT-partitionsfunktion kallas
myRangePF1
med tre gränsvärden som partitioneras i fyra partitioner. - Skapar ett partitionsschema med namnet
myRangePS1
som gällermyRangePF1
för de fyra nya filgrupperna. - Skapar en partitionerad tabell som heter
PartitionTable
och användermyRangePS1
för att partitioneracol1
.
I Object Exploreransluter du till en instans av databasmotorn.
I verktygsfältet Standard väljer du Ny fråga.
Det här exemplet skapar en ny databas och använder den. Sedan skapas nya filgrupper, en partitionsfunktion och ett partitionsschema. En ny tabell skapas med partitionsschemat angivet som lagringsplats. Kopiera och klistra in följande exempel i frågefönstret.
Om du använder en hanterad instans tar du bort parametern
FILENAME
och det associerade värdet från kommandotALTER DATABASE ADD FILE
. Den hanterade instansen avgör filsökvägen åt dig automatiskt.Om du använder en SQL Server-instans anpassar du värdet för parametern
FILENAME
till en plats som är lämplig för din instans.Om du vill använda en befintlig databas tar du bort kommandot
CREATE DATABASE
och ändrar instruktionenUSE
till lämpligt databasnamn.Välj Kör.
CREATE DATABASE PartitionTest; GO USE PartitionTest; GO ALTER DATABASE PartitionTest ADD FILEGROUP test1fg; GO ALTER DATABASE PartitionTest ADD FILEGROUP test2fg; GO ALTER DATABASE PartitionTest ADD FILEGROUP test3fg; GO ALTER DATABASE PartitionTest ADD FILEGROUP test4fg; ALTER DATABASE PartitionTest ADD FILE ( NAME = partitiontest1, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest1.ndf', SIZE = 5MB, FILEGROWTH = 5MB ) TO FILEGROUP test1fg; ALTER DATABASE PartitionTest ADD FILE ( NAME = partitiontest2, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest2.ndf', SIZE = 5MB, FILEGROWTH = 5MB ) TO FILEGROUP test2fg; GO ALTER DATABASE PartitionTest ADD FILE ( NAME = partitiontest3, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest3.ndf', SIZE = 5MB, FILEGROWTH = 5MB ) TO FILEGROUP test3fg; GO ALTER DATABASE PartitionTest ADD FILE ( NAME = partitiontest4, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\partitiontest4.ndf', SIZE = 5MB, FILEGROWTH = 5MB ) TO FILEGROUP test4fg; GO CREATE PARTITION FUNCTION myRangePF1 (datetime2(0)) AS RANGE RIGHT FOR VALUES ('2022-04-01', '2022-05-01', '2022-06-01') ; GO CREATE PARTITION SCHEME myRangePS1 AS PARTITION myRangePF1 TO (test1fg, test2fg, test3fg, test4fg) ; GO CREATE TABLE PartitionTable (col1 datetime2(0) PRIMARY KEY, col2 char(10)) ON myRangePS1 (col1) ; GO
Partitionering av en tabell med SSMS
Följ stegen i det här avsnittet om du vill skapa filgrupper och motsvarande filer och sedan skapa en partitionerad tabell eller partitionering av en befintlig tabell med hjälp av guiden Skapa partition i SQL Server Management Studio (SSMS). Guiden Skapa partition finns i SSMS för SQL Server och Azure SQL Managed Instance. Information om Azure SQL Database finns i Skapa en partitionerad tabell i en filgrupp med Transact-SQL-.
Skapa nya filgrupper (valfritt)
Om du vill placera den partitionerade tabellen på en eller flera nya filgrupperföljer du stegen i det här avsnittet. Både SQL Server och Azure SQL Managed Instance har stöd för att skapa filgrupper och filer. För Azure SQL Managed Instance konfigureras sökvägen för alla filer som skapas automatiskt åt dig.
I Object Explorer högerklickar du på databasen där du vill skapa en partitionerad tabell och väljer Egenskaper.
I dialogrutan Database Properties –database_name, under Välj en sida, välj Filgrupper.
Under Raderväljer du Lägg till. I den nya raden anger du filgruppens namn.
Varning
När du anger flera filgrupper måste du alltid ha en extra filgrupp utöver det antal filgrupper som anges för gränsvärdena när du skapar partitioner.
Fortsätt att lägga till rader tills du har skapat alla filgrupper för den partitionerade tabellen eller tabellerna.
Välj OK.
Under Välj en sida, välj Filer.
Under Raderväljer du Lägg till. På den nya raden anger du ett filnamn och väljer en filgrupp.
Fortsätt att lägga till rader tills du har skapat minst en fil för varje filgrupp.
Skapa en partitionerad tabell
Du kan också expandera mappen Tables och skapa en tabell som vanligt. Mer information finns i Skapa tabeller (databasmotor). Du kan också ange en befintlig tabell i nästa steg.
Högerklicka på den tabell som du vill partitioneras, peka på Storageoch välj sedan Skapa partition....
I guiden "Skapa partition", på sidan "Välkommen till guiden Skapa partition", väljer du Nästa.
På sidan Välj en partitioneringskolumn går du till Tillgängliga partitioneringskolumner rutnätet och väljer den kolumn där du vill partitionera tabellen. Endast kolumner med datatyper som kan användas för att partitionera data visas i Tillgängliga partitioneringskolumner rutnät. Om du väljer en beräknad kolumn som partitioneringskolumn måste kolumnen skapas som en bevarad kolumn.
De val du har för partitioneringskolumnen och värdeintervallet bestäms främst av i vilken utsträckning dina data kan grupperas på ett logiskt sätt. Du kan till exempel välja att dela upp dina data i logiska grupper efter månader eller kvartal om ett år. De frågor som du planerar att ställa mot dina data avgör om den här logiska grupperingen är tillräcklig för att hantera dina tabellpartitioner. Alla datatyper är giltiga för användning som partitioneringskolumner, förutom text, ntext, image, xml, tidsstämpel, varchar(max), nvarchar(max), varbinary(max), aliasdatatyper, eller common language runtime (CLR) användardefinierade datatyper.
Följande ytterligare alternativ är tillgängliga på den här sidan:
Samordna den här tabellen med den valda partitionerade tabellen
Gör att du kan välja en partitionerad tabell som innehåller relaterade data som ska kopplas till den här tabellen i partitioneringskolumnen. Tabeller med partitioner som är anslutna till partitioneringskolumnerna efterfrågas vanligtvis mer effektivt.Lagringsjustera icke-unika index och unika index med en indexerad partitionskolumn
Justerar alla index i tabellen som är partitionerade med samma partitionsschema. När en tabell och dess index är justerade kan du flytta partitioner in och ut ur partitionerade tabeller mer effektivt, eftersom dina data partitioneras på samma sätt.När du har valt partitioneringskolumnen och andra alternativ väljer du Nästa.
På sidan Välj en partitionsfunktion under Välj partitionsfunktionväljer du antingen Ny partitionsfunktion eller Befintlig partitionsfunktion. Om du väljer Ny partitionsfunktionanger du namnet på funktionen. Om du väljer Befintlig partitionsfunktionväljer du namnet på den funktion som du vill använda i listan. Alternativet Befintlig partitionsfunktion kommer inte att vara tillgängligt om det saknas andra partitionsfunktioner i databasen.
När du har slutfört den här sidan väljer du Nästa.
På sidan Välj ett partitionsschema under Välj partitionsschemaväljer du antingen Nytt partitionsschema eller Befintligt partitionsschema. Om du väljer Nytt partitionsschemaanger du namnet på schemat. Om du väljer Befintligt partitionsschemaväljer du namnet på det schema som du vill använda i listan. Alternativet Befintligt partitionsschema är inte tillgängligt om det inte finns några andra partitionsscheman i databasen.
När du har slutfört den här sidan väljer du Nästa.
På sidan Mappa partitioner under Intervallväljer du antingen vänstergräns eller höger gräns. Den vänstra gränsen anger att det högsta gränsvärdet ska inkluderas i en partition. Höger gräns anger att det lägsta avgränsningsvärdet ska ingå i varje partition. Läs mer om höger- och vänsterintervall i funktionen Partition.
När du anger flera gränspunkter måste du alltid ange en extra rad utöver de rader som tilldelar gränsvärden till en filgrupp.
I Välj filgrupper och ange gränsvärden rutnätet under Filegroupväljer du den filgrupp som du vill partitionera dina data i. Under Boundaryanger du gränsvärdet för varje filgrupp. Om du vill tilldela flera eller alla partitioner till samma filgrupp väljer du samma filgruppsnamn för varje rad. Om du väljer en filgrupp på en enskild rad och gränsvärdet lämnas tomt mappar partitionsfunktionen hela tabellen eller indexet till en enda partition med hjälp av partitionsfunktionens namn.
Följande ytterligare alternativ är tillgängliga på den här sidan:
ange gränser...
Öppnar dialogrutan Ange gränsvärden för att välja de gränsvärden och datumintervall som du vill använda för dina partitioner. Det här alternativet är bara tillgängligt när du har valt en partitioneringskolumn som innehåller någon av följande datatyper: datum, datetime, smalldatetime, datetime2eller datetimeoffset.Beräkna lagring
Beräknar radantal, nödvändigt utrymme och tillgängligt utrymme för lagring för varje filgrupp som anges för partitionerna. Dessa värden visas i rutnätet som skrivskyddade värden.Dialogrutan Ange gränsvärden tillåter följande ytterligare alternativ:
Startdatum
Väljer startdatumet för intervallvärdena för dina partitioner.Slutdatum
Väljer slutdatumet för intervallvärdena för dina partitioner. Om du har valt vänstergräns på sidan Mappa partitioner blir det här datumet det sista värdet för varje filgrupp/partition. Om du har valt högergräns på sidan Mappa partitioner blir det här datumet det första värdet i den näst sista filgruppen.datumintervall
Väljer det datumkornighets- eller intervallvärdessteg du vill ha för varje partition.När du har slutfört den här sidan väljer du Nästa.
På sidan Välj ett utdataalternativ anger du hur du vill slutföra den partitionerade tabellen. Välj Skapa skript för att skapa ett SQL-skript baserat på föregående sidor i guiden. Välj Kör omedelbart för att skapa den nya partitionerade tabellen när du har slutfört alla återstående sidor i guiden. Välj Schemalägg för att skapa den nya partitionerade tabellen vid en förutbestämd tidpunkt i framtiden.
Om du väljer Skapa skriptär följande alternativ tillgängliga under Skriptalternativ:
Skriv till fil
Genererar skriptet som en.sql
fil. Ange ett filnamn och en plats i rutan Filnamn eller välj Bläddra för att öppna dialogrutan Skriptfilplats. Från Spara somväljer du Unicode-text eller ANSI-text.skript till urklipp
Sparar skriptet i Urklipp.skript till nytt sökfönster
Genererar skriptet till ett nytt frågeredigerarefönster. Det här är standardvalet.Om du väljer Schemalägg, välj Ändra schema.
I dialogrutan Nytt jobbschema i rutan Namn anger du jobbschemats namn.
I listan Schematyp väljer du typ av schema:
Starta automatiskt när SQL Server-agenten startar
Starta när processorerna blir inaktiva
Återkommande. Välj det här alternativet om den nya partitionerade tabellen uppdateras regelbundet med ny information.
En gång. Det här är standardvalet.
Markera eller avmarkera kryssrutan Aktiverad för att aktivera eller inaktivera schemat.
Om du väljer Återkommande:
Under Frequency, i listan Förekommer, anger du förekomstfrekvensen:
Om du väljer Daily, ange i rutan Recurs varje hur ofta jobbschemat upprepas i dagar.
Om du väljer Weekly, i rutan Recurs every, anger du hur ofta jobbschemat upprepas varje vecka. Välj den dag eller de dagar i veckan där jobbschemat körs.
Om du väljer Månadsvisväljer du antingen Day eller The.
Om du väljer Daganger du både det datum i månaden som du vill att jobbschemat ska köras och hur ofta jobbschemat upprepas i månader. Om du till exempel vill att jobbschemat ska köras den 15:e dagen i månaden varannan månad väljer du Dag och anger "15" i den första rutan och "2" i den andra rutan. Det största antalet som tillåts i den andra rutan är "99".
Om du väljer väljer du den specifika veckodagen inom den månad som du vill att jobbschemat ska köras och hur ofta jobbschemat upprepas i månader. Om du till exempel vill att jobbschemat ska köras den sista veckodagen i månaden varannan månad väljer du Dag, väljer senaste från den första listan och veckodag från den andra listan och anger sedan "2" i den sista rutan. Du kan också välja första, andra, tredjeeller fjärdesamt specifika vardagar (till exempel söndag eller onsdag) från de två första listorna. Det största antalet som tillåts i den sista rutan är "99".
Under Daglig frekvensanger du hur ofta jobbschemat upprepas samma dag som jobbschemat körs:
Om du väljer Inträffar en gång ianger du den specifika tid på dagen då jobbschemat ska köras i rutan Inträffar en gång i. Ange timme, minut och sekund för dagen, samt AM eller PM.
Om du väljer Inträffar varjeanger du hur ofta jobbschemat körs under den dag som väljs under Frekvens. Om du till exempel vill att jobbschemat ska upprepas varannan timme under den dag då jobbschemat körs, väljer du alternativet Inträffar varje, ange "2" i den första rutan och välj sedan timme(er) i listan. Från den här listan kan du också välja minuter och sekunder. Det största antalet som tillåts i den första rutan är "100".
I rutan Start vid anger du den tid då jobbschemat ska börja köras. I rutan Slutar vid anger du den tid då jobbschemat ska sluta upprepas. Ange timme, minut och sekund för dagen, samt AM eller PM.
Under Varaktighetanger du i Startdatumdet datum då du vill att jobbschemat ska börja köras. Välj Slutdatum eller Inget slutdatum för att ange när jobbschemat ska sluta köras. Om du väljer Slutdatumanger du det datum då du vill att jobbschemat ska sluta köras.
Om du väljer One Timeanger du det datum då jobbschemat ska köras under engångshändelsei rutan Datum. I rutan Time anger du den tid då jobbschemat ska köras. Ange timme, minut och sekund för dagen, samt AM eller PM.
Under Sammanfattningi Beskrivningkontrollerar du att alla jobbschemainställningar är korrekta.
Välj OK.
När du har slutfört den här sidan väljer du Nästa.
På sidan Granska sammanfattning under Granska dina valexpanderar du alla tillgängliga alternativ för att kontrollera att alla partitionsinställningar är korrekta. Om allt är som förväntat väljer du Slutför.
På sidan Förloppssida för Skapa partitionsguide kan du övervaka statusinformation om åtgärderna i guiden för Skapa partition. Beroende på vilka alternativ du valde i guiden kan förloppssidan innehålla en eller flera åtgärder. Den översta rutan visar guidens övergripande status och antalet status-, fel- och varningsmeddelanden som guiden har tagit emot.
Följande alternativ finns tillgängliga på sidan Skapa partitionsguidens förloppssida:
Detaljer
Innehåller åtgärden, statusen och alla meddelanden som returneras från åtgärder som utförs av guiden.Åtgärd
Anger typen och namnet på varje åtgärd.status
Anger om guidens åtgärd som helhet returnerade värdet för Framgång eller Misslyckande.Meddelande
Innehåller eventuella fel- eller varningsmeddelanden som returneras från processen.Rapport
Skapar en rapport som innehåller resultatet av guiden Skapa partition. Alternativen är Visa rapport, Spara rapport till fil, Kopiera rapport till urklippoch Skicka rapport som e-post.Visa rapport
Öppnar dialogrutan Visa rapport, som innehåller en textrapport om förloppet för guiden Skapa partition.Spara rapport till fil
Öppnar dialogrutan Spara rapport som.Kopiera rapport till Urklipp
Kopierar resultatet av guidens förloppsrapport till Urklipp.Skicka rapport som e-post
Kopierar resultatet av guidens statusrapport till ett e-postmeddelande.När du är klar väljer du Stäng.
Guiden Skapa partition skapar partitionsfunktionen och schemat och tillämpar sedan partitioneringen på den angivna tabellen. Kontrollera tabellpartitioneringen genom att högerklicka på tabellen i Object Explorer och välja Egenskaper. Välj sidan Storage. Sidan visar information, till exempel namnet på partitionsfunktionen och schemat och antalet partitioner.
Fråga efter metadata för partitionerade tabeller och index
Du kan fråga efter metadata för att avgöra om en tabell är partitionerad, gränspunkterna för en partitionerad tabell, partitioneringskolumnen för en partitionerad tabell, antalet rader i varje partition och om datakomprimering har implementerats på partitioner.
Kontrollera om en tabell är partitionerad
Följande fråga returnerar en eller flera rader om tabellen PartitionTable
partitioneras, eller om några icke-grupperade index i tabellen partitioneras. Om tabellen inte är partitionerad och inga icke-grupperade index i tabellen partitioneras returneras inga rader.
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, *
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.[object_id] = i.[object_id]
JOIN sys.partition_schemes ps
ON i.data_space_id = ps.data_space_id
WHERE t.name = 'PartitionTable';
GO
Fastställa gränsvärdena för en partitionerad tabell
Följande fråga returnerar gränsvärdena för varje partition i tabellen PartitionTable
.
Frågan använder kolumnen type
i sys.indexes för att endast returnera information för tabellens klustrade index eller för bastabellen om tabellen är en heap. Om du vill inkludera partitionerade icke-grupperade index i frågeresultatet tar du bort eller kommenterar ut AND i.type <= 1
från frågan.
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, i.name AS IndexName,
p.partition_number, p.partition_id, i.data_space_id, f.function_id, f.type_desc,
r.boundary_id, r.value AS BoundaryValue
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
WHERE
t.name = 'PartitionTable'
AND i.type <= 1
ORDER BY SchemaName, t.name, i.name, p.partition_number;
Fastställa partitionskolumnen för en partitionerad tabell
Följande fråga returnerar namnet på partitioneringskolumnen för tabellen PartitionTable
.
Frågesatsen använder kolumnen type
i sys.indexes för att endast returnera information för tabellens klustrade index, eller för bastabellen om tabellen är en heap. Om du vill inkludera partitionerade icke-grupperade index i frågeresultatet tar du bort eller kommenterar ut AND i.type <= 1
från frågan.
SELECT
t.[object_id] AS ObjectID
, SCHEMA_NAME(t.schema_id) AS SchemaName
, t.name AS TableName
, ic.column_id AS PartitioningColumnID
, c.name AS PartitioningColumnName
, i.name as IndexName
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.[object_id] = i.[object_id]
AND i.[type] <= 1 -- clustered index or a heap
JOIN sys.partition_schemes AS ps
ON ps.data_space_id = i.data_space_id
JOIN sys.index_columns AS ic
ON ic.[object_id] = i.[object_id]
AND ic.index_id = i.index_id
AND ic.partition_ordinal >= 1 -- because 0 = non-partitioning column
JOIN sys.columns AS c
ON t.[object_id] = c.[object_id]
AND ic.column_id = c.column_id
WHERE t.name = 'PartitionTable';
GO
Identifiera de rader som beskriver det möjliga värdeintervallet i varje partition.
Följande fråga returnerar raderna efter partition för tabell PartitionTable
och en beskrivning av "jämförelseoperatorerna" för den partitionsfunktion som används.
Fråga original från Kalen Delaney.
Frågan använder kolumnen type
i sys.indexes för att endast returnera information för tabellens klustrade index eller för bastabellen om tabellen är en heap. Om du vill inkludera partitionerade icke-grupperade index i frågeresultatet tar du bort eller kommenterar ut AND i.type <= 1
från frågan.
SELECT SCHEMA_NAME(t.schema_id) AS SchemaName, t.name AS TableName, i.name AS IndexName,
p.partition_number AS PartitionNumber, f.name AS PartitionFunctionName, p.rows AS Rows, rv.value AS BoundaryValue,
CASE WHEN ISNULL(rv.value, rv2.value) IS NULL THEN 'N/A'
ELSE
CASE WHEN f.boundary_value_on_right = 0 AND rv2.value IS NULL THEN '>='
WHEN f.boundary_value_on_right = 0 THEN '>'
ELSE '>='
END + ' ' + ISNULL(CONVERT(varchar(64), rv2.value), 'Min Value') + ' ' +
CASE f.boundary_value_on_right WHEN 1 THEN 'and <'
ELSE 'and <=' END
+ ' ' + ISNULL(CONVERT(varchar(64), rv.value), 'Max Value')
END AS TextComparison
FROM sys.tables AS t
JOIN sys.indexes AS i
ON t.object_id = i.object_id
JOIN sys.partitions AS p
ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id and r.boundary_id = p.partition_number
LEFT JOIN sys.partition_range_values AS rv
ON f.function_id = rv.function_id
AND p.partition_number = rv.boundary_id
LEFT JOIN sys.partition_range_values AS rv2
ON f.function_id = rv2.function_id
AND p.partition_number - 1= rv2.boundary_id
WHERE
t.name = 'PartitionTable'
AND i.type <= 1
ORDER BY t.name, p.partition_number;
Kolumnen TextComparison
beskriver det möjliga intervallet med värden i varje partition baserat på definitionen av partitionsfunktionen. Här är en vy över exempelresultat från frågan:
Schemans namn | Tabellnamn | IndexNamn | PartitionNummer | PartitionFunctionName | rader | Gränsvärde | Textjämförelse |
---|---|---|---|---|---|---|---|
dbo | Partitionstabell | PK_PartitionTable | 1 | PFTest | 0 | 2022-03-01 00:00:00.000 | >= Minsta värde och < 1 mars 2022 12:00 |
Dbo | Partitionstabell | PK_Partitionstabell | 2 | PFTest | 2 | 2022-04-01 00:00:00.000 | >= 1 mar 2022 12:00 och < 1 apr 2022 12:00 |
Dbo | Partitionsbord | PK_PartitionTable | 3 | PFTest | 1 | 2022-05-01 00:00:00.000 | >= 1 apr 2022 12:00 och < 1 maj 2022 12:00 |
Dbo | Partitionstabell | PK_PartitionTable | 4 | PFTest | 0 | 2022-06-01 00:00:00.000 | >= 1 maj 2022 12:00 och < 1 juni 2022 12:00 |
Dbo | Partitionstabell | PK_PartitionTable | 5 | PFTest | 1 | 2022-07-01 00:00:00.000 | >= 1 jun 2022 12:00 och < 1 juli 2022 12:00 |
dbo | Partitionsschema | PK_PartitionTable | 6 | PFTest | 0 | NOLL | >= 1 jul 2022 12:00 och < maxvärde |
Begränsningar
Lär dig mer om begränsningar och prestandaöverväganden för partitionering i Begränsningar
Relaterat innehåll
- Partitionerade tabeller och index
- Skalning ut med Azure SQL Database
- Partitioneringstabeller i dedikerade SQL-pooler
- arkitektur och designguide för SQL Server och Azure SQL-index
- ALTER DATABASE (Transact-SQL) Fil- och filgruppsalternativ
- CREATE PARTITION FUNCTION (Transact-SQL)
- CREATE PARTITION SCHEME (Transact-SQL)
- CREATE TABLE (Transact-SQL)