Creare tabelle e indici partizionati

Si applica a:SQL ServerDatabase SQL di AzureIstanza gestita di SQL di Azure

È possibile creare una tabella o un indice partizionato in SQL Server, database SQL di Azure e Istanza gestita di SQL di Azure usando SQL Server Management Studio o Transact-SQL. I dati negli indici e nelle tabelle partizionate vengono suddivisi orizzontalmente in unità da distribuire in più filegroup di un database o da archiviare in un singolo filegroup. Il partizionamento semplifica la gestione delle tabelle e degli indici di grandi dimensioni e li rende più scalabili.

La creazione di un indice o di una tabella partizionata richiede generalmente quattro operazioni:

  1. Facoltativamente, creare uno o più filegroup e i file di dati corrispondenti in cui saranno incluse le partizioni specificate dal relativo schema. Il motivo principale per cui inserire le partizioni in più filegroup è che in questo modo è possibile eseguire operazioni di backup e ripristino sui filegroup modo indipendente. Se non è necessario, è possibile decidere di assegnare tutte le partizioni a un singolo filegroup, usando un filegroup esistente, ad esempio PRIMARY, o un nuovo filegroup con file di dati correlati. In quasi tutti gli scenari, si otterranno tutti i vantaggi del partizionamento indipendentemente dal fatto che si usino o meno più filegroup.

  2. Creare una funzione di partizione tramite cui viene eseguito il mapping delle righe di una tabella o di un indice alle partizioni in base ai valori della colonna specificata. È possibile usare una singola funzione di partizione per partizionare più oggetti.

  3. Creare uno schema di partizione tramite cui viene eseguito il mapping delle partizioni di un indice o una tabella partizionata a uno o più filegroup. È possibile usare uno schema di partizione singola per partizionare più oggetti.

  4. Creare o modificare una tabella o un indice e specificare lo schema di partizione come posizione di archiviazione, insieme alla colonna che fungerà da colonna di partizionamento.

Nota

Il partizionamento è supportato completamente nel database SQL di Azure. Poiché solo il filegroup PRIMARY è supportato in un database SQL di Azure, tutte le partizioni devono essere inserite nel filegroup PRIMARY.

Il partizionamento delle tabelle è disponibile anche nei pool SQL dedicati in Azure Synapse Analytics, con alcune differenze di sintassi. Per altre informazioni, vedere Partizionamento di tabelle nel pool SQL dedicato.

Autorizzazioni

La creazione di una tabella partizionata richiede l'autorizzazione CREATE TABLE per il database e l'autorizzazione ALTER per lo schema in cui viene creata la tabella. La creazione di un indice partizionato richiede l'autorizzazione ALTER per la tabella o la vista in cui viene creato l'indice. Per la creazione di una tabella o un indice partizionato è richiesta una delle seguenti autorizzazioni aggiuntive:

  • Autorizzazione ALTER ANY DATASPACE. Questa autorizzazione viene concessa per impostazione predefinita al ruolo predefinito del server sysadmin e ai ruoli predefiniti del database db_owner e db_ddladmin .

  • Autorizzazione CONTROL o ALTER per il database in cui vengono creati la funzione e lo schema di partizione.

  • Autorizzazione CONTROL SERVER o ALTER ANY DATABASE per il server del database in cui vengono creati la funzione e lo schema di partizione.

Creare una tabella partizionata in un filegroup tramite Transact-SQL

Se non è necessario eseguire operazioni di backup e ripristino in modo indipendente sui filegroup, il partizionamento di una tabella usando un singolo filegroup semplifica la gestione della tabella partizionata nel tempo.

Questo esempio è adatto per il database SQL di Azure, che non supporta l'aggiunta di file e filegroup. Il partizionamento delle tabelle è supportato nel database SQL di Azure creando partizioni nel filegroup PRIMARY. Per SQL Server e Istanza gestita di SQL di Azure, è possibile specificare un filegroup creato dall'utente, a seconda delle procedure di gestione dei filegroup e dei file.

L'esempio illustra come creare una tabella partizionata in SQL Server Management Studio (SSMS) usando Transact-SQL e assegna tutte le partizioni al filegroup PRIMARY. Esempio:

  • Crea una funzione di partizione RANGE RIGHT denominata myRangePF1 con tre valori limite usando il tipo di dati datetime2. Tre valori limite genereranno una tabella partizionata con quattro partizioni.
  • Crea uno schema di partizione denominato myRangePS1 che usa la sintassi ALL TO per assegnare tutte le partizioni nella funzione di partizione myRangePF1 al filegroup PRIMARY.
  • Crea una tabella denominata PartitionTable nello schema di partizione myRangePS1 specificando una colonna denominata col1 come colonna di partizionamento.
  1. In Esplora oggetti connettersi a un'istanza del motore di database.

  2. Sulla barra Standard selezionare Nuova query.

  3. Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. In questo esempio vengono creati una funzione di partizione e un schema di partizione. Una nuova tabella viene creata con lo schema di partizione specificato come percorso di archiviazione.

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

Creare una tabella partizionata in un filegroup con Transact-SQL

Per creare uno o più filegroup, i file corrispondenti e una tabella partizionata con Transact-SQL in SSMS, attenersi ai passaggi della procedura riportata di seguito.

Sia SQL Server che l'istanza gestita di SQL di Azure supportano la creazione di filegroup e file. Istanza gestita di SQL di Azure configura automaticamente il percorso per tutti i file di database aggiunti, quindi il comando ALTER DATABASE ADD FILE in Istanza gestita di SQL di Azure non consente il parametro FILENAME. Il database SQL di Azure supporta la creazione di tabelle partizionate solo nel filegroup PRIMARY. Il codice di esempio per il database SQL di Azure è disponibile in Creare una tabella partizionata in un filegroup usando Transact-SQL.

Eseguire l'esempio seguente su un database vuoto. Esempio:

  • Aggiunge quattro nuovi filegroup a un database.
  • Aggiunge un file a ogni filegroup.
  • Crea una funzione di partizione RANGE RIGHT denominata myRangePF1 con tre valori limite che partizioneranno una tabella in quattro partizioni.
  • Crea uno schema di partizione denominato myRangePS1 che si applica myRangePF1 ai quattro nuovi filegroup.
  • Crea una tabella partizionata denominata PartitionTable che usa myRangePS1 per partizionare col1.
  1. In Esplora oggetti connettersi a un'istanza del motore di database.

  2. Sulla barra degli strumenti Standard selezionare Nuova query.

  3. In questo esempio viene creato e utilizzato un nuovo database. Nell'esempio vengono creati i nuovi filegroup, una funzione di partizione e un schema di partizione. Una nuova tabella viene creata con lo schema di partizione specificato come percorso di archiviazione. Copiare e incollare l'esempio seguente nella finestra Query.

    Se si usa un'istanza gestita, rimuovere il parametro FILENAME e il valore associato dal comando ALTER DATABASE ADD FILE. L'istanza gestita determinerà automaticamente il percorso del file.

    Se si usa un'istanza di SQL Server, personalizzare il valore per il parametro FILENAME in una posizione appropriata per l'istanza.

    Se si desidera utilizzare un database esistente, rimuovere il comando CREATE DATABASE e modificare l'istruzione USE con il nome del database appropriato.

    Selezionare Esegui.

    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  
    

Partizionare una tabella con SSMS

Seguire la procedura descritta in questa sezione per creare facoltativamente filegroup e file corrispondenti, quindi creare una tabella partizionata o una partizione esistente usando la Creazione guidata partizione in SQL Server Management Studio (SSMS). La Creazione guidata partizione è disponibile in SSMS per SQL Server e Istanza gestita di SQL di Azure. Per il database SQL di Azure, vedere Creare una tabella partizionata in un filegroup usando Transact-SQL.

Creare nuovi filegroup (facoltativo)

Se si desidera inserire la tabella partizionata in uno o più nuovi filegroup, seguire la procedura descritta in questa sezione. Sia SQL Server che l'istanza gestita di SQL di Azure supportano la creazione di filegroup e file. Per Istanza gestita di SQL di Azure, il percorso di tutti i file creati verrà configurato automaticamente.

  1. In Esplora oggetti fare clic con il pulsante destro del mouse sul database in cui si vuole creare una tabella partizionata e scegliere Proprietà.

  2. Nella finestra di dialogo Proprietà database -nome_database selezionare Filegroupin Selezione pagina.

  3. In Righe, seleziona Aggiungi. Nella nuova riga immettere il nome del filegroup.

    Avviso

    Quando si specificano più filegroup, è necessario disporre sempre di un filegroup aggiuntivo oltre al numero di filegroup specificati per i valori limite durante la creazione delle partizioni.

  4. Continuare ad aggiungere righe finché non vengono creati tutti i filegroup per la tabella o le tabelle partizionate.

  5. Seleziona OK.

  6. In Selezione paginaselezionare File.

  7. In Righe, seleziona Aggiungi. Nella nuova riga immettere un nome di file e selezionare un filegroup.

  8. Continuare ad aggiungere righe finché non viene creato almeno un file per ogni filegroup.

Creare una tabella partizionata

  1. Facoltativamente, espandere la cartella Tabelle e creare una tabella normalmente. Per altre informazioni, vedere Creare tabelle (motore di database). In alternativa, è possibile specificare una tabella esistente nella fase descritta di seguito.

  2. Fare clic con il pulsante destro del mouse sulla tabella che si vuole partizionare e scegliere Archiviazione, quindi selezionare Crea partizione.

  3. Nella pagina Benvenuti nella Creazione guidata partizione della relativa procedura guidata fare clic su Avanti.

  4. Nella griglia Colonne di partizionamento disponibili della pagina Seleziona una colonna di partizionamento selezionare la colonna in cui partizionare la tabella. Nella griglia Colonne di partizionamento disponibili verranno visualizzate solo le colonne con i tipi di dati che possono essere utilizzati per partizionare dati. Se come colonna di partizionamento se ne sceglie una calcolata, la colonna deve essere creata come persistente.

    Le scelte disponibili per la colonna di partizionamento e per l'intervallo di valori sono determinate innanzitutto dalla possibilità di raggruppare i dati in modo logico. È possibile, ad esempio, scegliere di dividere i dati in raggruppamenti logici in base ai mesi o ai trimestri di un anno. Le query che verranno eseguite sui dati consentiranno di determinare se questo raggruppamento logico sia appropriato per la gestione delle partizioni delle tabelle. Come colonne di partizionamento possono essere usati tutti i tipi di dati tranne text, ntext, image, xml, timestamp, varchar(max), nvarchar(max), varbinary(max), tipi di dati alias o tipi di dati CLR definiti dall'utente.

    In questa pagina sono disponibili le seguenti opzioni aggiuntive:

    Colloca tabella nella tabella partizionata selezionata
    Consente di selezionare una tabella partizionata contenente dati correlati e di creare un join con la tabella nella colonna di partizionamento. Le query sulle tabelle con partizioni unite nelle colonne di partizionamento vengono in genere eseguite in modo più efficiente.

    Allinea nello spazio di archiviazione indici univoci e non univoci con una colonna di partizione indicizzata
    Consente di allineare tutti gli indici della tabella partizionati con lo stesso schema di partizione. Quando una tabella e i relativi indici sono allineati, è possibile spostare in modo più efficace le partizioni all'interno e all'esterno delle tabelle partizionate, in quanto i dati vengono partizionati nello stesso modo.

    Dopo aver selezionato la colonna di partizionamento e qualsiasi altra opzione, fare clic su Avanti.

  5. In Seleziona funzione di partizione della pagina Seleziona una funzione di partizione fare clic su Nuova funzione di partizione o su Funzione di partizione esistente. Se si sceglie Nuova funzione di partizione, immettere il nome della funzione. Se si sceglie Funzione di partizione esistente, selezionare nell'elenco il nome della funzione che si desidera utilizzare. L'opzione Funzione di partizione esistente non sarà disponibile se non sono presenti altre funzioni di partizione nel database.

    Dopo aver completato questa pagina, fare clic su Avanti.

  6. In Seleziona schema di partizione della pagina Seleziona uno schema di partizione fare clic su Nuovo schema di partizione o su Schema di partizione esistente. Se si sceglie Nuovo schema di partizione, immettere il nome dello schema. Se si sceglie Schema di partizione esistente, selezionare nell'elenco il nome dello schema che si desidera utilizzare. L'opzione Schema di partizione esistente non sarà disponibile se non sono presenti altri schemi di partizione nel database.

    Dopo aver completato questa pagina, fare clic su Avanti.

  7. Nella pagina Partizioni mappa, in Intervallo, selezionare Limite sinistro o Limite destro. Limite sinistro specifica che il valore di delimitazione più alto verrà incluso all'interno di una partizione. Limite destro specifica che il valore di delimitazione più basso verrà incluso in ogni partizione. Altre informazioni sugli intervalli destro e sinistro sono disponibili in Funzione di partizione.

    Quando si specificano più punti limite, è necessario immettere sempre una riga aggiuntiva oltre alle righe che assegnano valori limite a un filegroup.

    In Filegroup nella griglia Selezionare i filegroup e specificare i valori limiteselezionare il filegroup in cui si desidera partizionare i dati. In Limiteimmettere il valore limite per ogni filegroup. Se si desidera assegnare più o tutte le partizioni allo stesso filegroup, selezionare lo stesso nome di filegroup per ogni riga. Se si seleziona un filegroup in una singola riga e il valore limite viene lasciato vuoto, la funzione di partizione consente di eseguire il mapping dell'intera tabella o dell'indice a un'unica partizione tramite il nome della funzione di partizione.

    In questa pagina sono disponibili le seguenti opzioni aggiuntive:

    Imposta limiti...
    Consente di aprire la finestra di dialogo Imposta valori limite per selezionare i valori limite e gli intervalli di date desiderati per le partizioni. Questa opzione è disponibile solo se è stata selezionata una colonna di partizionamento contenente uno dei tipi di dati seguenti: date, datetime, smalldatetime, datetime2o datetimeoffset.

    Valuta spazio di archiviazione
    Consente di valutare il numero di righe, lo spazio necessario e quello disponibile per l'archiviazione di ciascun filegroup specificato per le partizioni. Questi valori vengono visualizzati nella griglia come valori di sola lettura.

    Nella finestra di dialogo Imposta valori limite sono inoltre disponibili le seguenti opzioni aggiuntive:

    Data di inizio
    Consente di selezionare la data di inizio per i valori di intervallo delle partizioni.

    Data di fine
    Consente di selezionare la data di fine per i valori di intervallo delle partizioni. Se è stata selezionata l'opzione Limite sinistro nella pagina Esegui mapping partizioni , questa data costituirà l'ultimo valore per ogni filegroup/partizione. Se è stata selezionata l'opzione Limite destro nella pagina Esegui mapping partizioni , questa data costituirà il primo valore nel penultimo filegroup.

    Intervallo di date
    Consente di selezionare la granularità della data o l'incremento dei valori di intervallo desiderato per ogni partizione.

    Dopo aver completato questa pagina, fare clic su Avanti.

  8. Nella pagina Seleziona un'opzione di output specificare il modo in cui si desidera completare la tabella partizionata. Selezionare Crea script per creare uno script SQL in base alle pagine precedenti della procedura guidata. Selezionare Esegui immediatamente per creare la nuova tabella partizionata dopo aver completato tutte le pagine rimanenti della procedura guidata. Selezionare Pianifica per creare la nuova tabella partizionata in un momento predeterminato nel futuro.

    Se si seleziona Crea script, in Opzioni di scriptingsono disponibili le opzioni seguenti:

    Genera script nel file
    Genera lo script come file con estensione sql. Immettere un nome di file e il percorso nella casella Nome file o fare clic su Sfoglia per aprire la finestra di dialogo Percorso file script. In Salva con nomeselezionare Testo Unicode o Testo ANSI.

    Genera script negli Appunti
    Salva lo script negli Appunti.

    Genera script in nuova finestra Query
    Genera lo script in una nuova finestra dell'editor di query. Si tratta della selezione predefinita.

    Se si seleziona Pianifica, fare clic su Cambia pianificazione.

    1. Nella casella Nome della finestra di dialogo Nuova pianificazione processo immettere il nome della pianificazione del processo.

    2. Nell'elenco Tipo pianificazione selezionare il tipo di pianificazione:

      • Avvia automaticamente all'avvio di SQL Server Agent

      • Avvia quando la CPU risulta inattiva

      • Periodica. Selezionare questa opzione se la nuova tabella partizionata viene aggiornata regolarmente con nuove informazioni.

      • Singola occorrenza. Si tratta della selezione predefinita.

    3. Selezionare o deselezionare la casella di controllo Abilitata per abilitare o disabilitare la pianificazione.

    4. Se si seleziona Periodica:

      1. In Frequenzanell'elenco Ricorrenza specificare la frequenza di occorrenza:

        • Se si seleziona Giornaliera, nella casella Ogni immettere la frequenza in base alla quale si ripete la pianificazione del processo nei giorni.

        • Se si seleziona Settimanale, nella casella Ogni immettere la frequenza in base alla quale si ripete la pianificazione del processo nelle settimane. Selezionare i giorni della settimana durante i quali viene eseguita la pianificazione del processo.

        • Se si seleziona Mensile, selezionare Giorno oppure Ogni.

          • Se si seleziona Giorno, immettere sia la data del mese in cui si desidera sia eseguita la pianificazione del processo sia la frequenza in base alla quale si ripete questa pianificazione nei mesi. Ad esempio, se si vuole che la pianificazione del processo sia eseguita il giorno 15 del mese a mesi alterni, selezionare Giorno e immettere "15" nella prima casella e "2" nella seconda casella. Il numero più grande consentito nella seconda casella è "99".

          • Se si sceglie Ogni, selezionare il giorno specifico della settimana del mese in cui si desidera sia eseguita la pianificazione del processo e la frequenza in base alla quale si ripete questa pianificazione nei mesi. Ad esempio, se si vuole che la pianificazione del processo sia eseguita l'ultimo giorno feriale del mese a mesi alterni, selezionare Giorno, selezionare ultimo nel primo elenco e giorno feriale nel secondo elenco, quindi immettere "2" nell'ultima casella. Nei primi due elenchi è anche possibile selezionare primo, secondo, terzoo quarto, nonché i giorni della settimana specifici, ad esempio domenica o mercoledì. Il numero più grande consentito nell'ultima casella è "99".

      2. In Frequenza giornalieraspecificare la frequenza in base alla quale si ripete la pianificazione del processo in quel determinato giorno:

        • Se si seleziona Una sola volta alle, immettere l'ora specifica del giorno in cui deve essere eseguita la pianificazione del processo nella casella Una sola volta alle . Immettere l'ora, il minuto e il secondo del giorno, nonché AM o PM.

        • Se si seleziona Ognispecificare la frequenza in base alla quale la pianificazione del processo viene eseguita durante il giorno scelto in Frequenza. Ad esempio, se si vuole che la pianificazione del processo sia ripetuta ogni 2 ore durante il giorno scelto per questa pianificazione, selezionare Ogni, immettere "2" nella prima casella e quindi selezionare ora/e nell'elenco. In questo elenco è anche possibile selezionare minuto/i e secondo/i. Il numero più grande consentito nella prima casella è "100".

          Nella casella A partire dalle immettere l'ora in cui dovrebbe iniziare l'esecuzione della pianificazione del processo. Nella casella Fino alle immettere l'ora in cui dovrebbe terminare la ripetizione della pianificazione del processo. Immettere l'ora, il minuto e il secondo del giorno, nonché AM o PM.

      3. In Duratadi Data inizioimmettere la data in cui si desidera sia avviata l'esecuzione della pianificazione del processo. Selezionare Data fine o Nessuna data di fine per indicare quando dovrebbe terminare l'esecuzione della pianificazione del processo. Se si seleziona Data fineimmettere la data in cui si desidera venga terminata l'esecuzione della pianificazione del processo.

    5. Se si seleziona Singola occorrenza, in Singola occorrenza, nella casella Data immettere la data in cui verrà eseguita la pianificazione del processo. Nella casella Ora immettere l'ora in cui verrà eseguita la pianificazione del processo. Immettere l'ora, il minuto e il secondo del giorno, nonché AM o PM.

    6. In Descrizionein Riepilogoverificare che tutte le impostazioni della pianificazione del processo siano corrette.

    7. Seleziona OK.

    Dopo aver completato questa pagina, fare clic su Avanti.

  9. In Controlla selezioni della pagina Controlla riepilogoespandere tutte le opzioni disponibili per verificare che tutte le impostazioni della partizione siano corrette. Se tutte le impostazioni sono corrette, fare clic su Fine.

  10. Nella pagina Stato Creazione guidata partizione monitorare le informazioni sullo stato delle azioni della Creazione guidata partizione. A seconda delle opzioni selezionate nella procedura guidata, la pagina di stato può contenere una o più azioni. Nella casella superiore viene visualizzato lo stato complessivo della procedura guidata e viene indicato il numero di messaggi di stato, di errore e di avviso restituiti durante l'esecuzione della procedura guidata.

    Le opzioni seguenti sono disponibili nella pagina Stato Creazione guidata partizione :

    Dettagli
    Consente di visualizzare i messaggi di azione, di stato e di altro tipo restituiti dall'azione eseguita nella procedura guidata.

    Azione
    Specifica il tipo e il nome di ciascuna azione.

    Stato
    Indica se l'intera azione della procedura guidata ha restituito il valore Esito positivo o Esito negativo.

    Message
    Fornisce tutti i messaggi di errore o di avviso restituiti dal processo.

    - Report
    Crea un report contenente i risultati della Creazione guidata partizione. Le opzioni sono Visualizza report, Salva report su file, Copia report negli Appuntie Invia report per posta elettronica.

    Visualizza report
    Apre la finestra di dialogo Visualizza report in cui è contenuto un report di testo dello stato della Creazione guidata partizione.

    Salva report su file
    Apre la finestra di dialogo Salva report con nome .

    Copia report negli Appunti
    Copia i risultati del report dello stato della procedura guidata negli Appunti.

    Invia report per posta elettronica
    Copia i risultati del report dello stato della procedura guidata in un messaggio di posta elettronica.

    Al termine, selezionare Chiudi.

Creazione guidata partizione crea la funzione di partizione e lo schema, quindi applica il partizionamento alla tabella specificata. Per verificare il partizionamento della tabella, in Esplora oggetti fare clic con il pulsante destro del mouse sulla tabella e scegliere Proprietà. Selezionare la pagina Archiviazione. Nella pagina vengono visualizzate informazioni come il nome della funzione e dello schema di partizione e il numero di partizioni.

Eseguire query sui metadati di indici e tabelle partizionate

È possibile eseguire query sui metadati per determinare se una tabella è partizionata, i punti limite per una tabella partizionata, la colonna di partizionamento per una tabella partizionata, il numero di righe in ogni partizione e se la compressione dei dati è stata implementata nelle partizioni.

Determinare se una tabella è partizionata

La query seguente restituisce una o più righe se la tabella PartitionTable è partizionata o se vengono partizionati indici non cluster nella tabella. Se la tabella non è partizionata e non vengono partizionati indici non cluster nella tabella, non vengono restituite righe.

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  

Determinare i valori limite per una tabella partizionata

Tramite la query seguente vengono restituiti i valori limite per ogni partizione nella tabella PartitionTable .

La query usa la colonna type in sys.indexes per restituire solo informazioni per l'indice cluster della tabella o per la tabella di base se la tabella è un heap. Per includere eventuali indici non cluster partizionati nei risultati della query, rimuovere o impostare come commento AND i.type <= 1 dalla query.

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;  

Determinare la colonna di partizione per una tabella partizionata

La query seguente restituisce il nome della colonna di partizionamento per la tabella PartitionTable.

La query usa la colonna type in sys.indexes per restituire solo informazioni per l'indice cluster della tabella o per la tabella di base se la tabella è un heap. Per includere eventuali indici non cluster partizionati nei risultati della query, rimuovere o impostare come commento AND i.type <= 1 dalla query.


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  

Determinare se le righe descrivono l'intervallo di valori possibile in ogni partizione

La query seguente restituisce le righe per partizione per la tabella PartitionTable e una descrizione degli "operatori di confronto" per la funzione di partizione in uso. Query originale fornita da Kalen Delaney.

La query usa la colonna type in sys.indexes per restituire solo informazioni per l'indice cluster della tabella o per la tabella di base se la tabella è un heap. Per includere eventuali indici non cluster partizionati nei risultati della query, rimuovere o impostare come commento AND i.type <= 1 dalla query.

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;

La colonna TextComparison descrive l'intervallo di valori possibile in ogni partizione in base alla definizione della funzione di partizione. Ecco una visualizzazione dei risultati di esempio della query:

SchemaName TableName IndexName PartitionNumber PartitionFunctionName rows BoundaryValue TextComparison
dbo PartitionTable PK_PartitionTable 1 PFTest 0 2022-03-01 00:00:00.000 >= valore minimo e < 1 mar 2022 12:00
dbo PartitionTable PK_PartitionTable 2 PFTest 2 2022-04-01 00:00:00.000 >= 1 mar 2022 12:00 e < 1 apr 2022 12:00
dbo PartitionTable PK_PartitionTable 3 PFTest 1 2022-05-01 00:00:00.000 >= 1 apr 2022 12:00 e < 1 mag 2022 12:00
dbo PartitionTable PK_PartitionTable 4 PFTest 0 2022-06-01 00:00:00.000 >= 1 mag 2022 12:00 e < 1 giu 2022 12:00
dbo PartitionTable PK_PartitionTable 5 PFTest 1 2022-07-01 00:00:00.000 >= 1 giu 2022 12:00 e < 1 lug 2022 12:00
dbo PartitionTable PK_PartitionTable 6 PFTest 0 NULL >= 1 lug 2022 12:00 e < valore massimo

Limiti

Altre informazioni sulle limitazioni e le considerazioni sulle prestazioni per il partizionamento sono disponibili in Limitazioni

Passaggi successivi

Altre informazioni sui concetti correlati sono disponibili negli articoli seguenti: