|
Oficiální dokumentace
Vyšší úrovně pro vytvoření tabulky oddílů 1. Vytvořte skupinu souborů (podobně jako Oracle Tablespace), samozřejmě ji nemůžete vytvořit, můžete dát všechny oddíly do jedné skupiny souborů 2. Stanovit partition funkci a rozdělit data podle rozsahu 3. Vytvořte schéma rozdělení, přiřaďte partition funkci a také přiřaďte skupinu souborů, partition funkce rozdělí data do několika rozsahů, musíte přiřadit několik skupin souborů, samozřejmě můžete tyto partition range vložit do stejné skupiny souborů 4. Vytvořte tabulku a připojte územní schéma
Narazil na chybu Když přímo kliknete pravým tlačítkem myši na tabulku pro export struktury tabulky, nemůžete exportovat informace o oddílu a informace o oddílu tabulky můžete exportovat pouze pravým kliknutím na skript pro generování úloh databáze
Několik závěrů z tabulky rozdělení: 1. Rozdělená pole nemusí být nutně indexována 2. Partitionovaná pole mohou být vytvořena jako shlukované indexy nebo jako neshlukované indexy 3. Rozdělená pole, ať už jsou shlukovaná nebo neklastrovaná indexy, jsou přestavěna do shlukovaných indexů bez přidružených schémat rozdělení a rozdělená tabulka se stává nerozdělenou tabulkou 4. Převeďte běžnou tabulku na rozdělenou tabulku, stačí vytvořit shlukovaný index v tabulce a použít rozdělení na shlukovaný index. Například když pole 1 nerozdělené tabulky vytvoří shlukovaný index a je spojeno se schématem dělení, tabulka je převedena na rozdělenou tabulku a rozdělené pole je pole 1. 5. Převést rozdělenou tabulku na normální tabulku, pokud je zde pole oddílu s indexem, znovu vytvořit rozdělené pole jako shlukovaný index a nespojovat se se schématem oddílů; pokud pole oddílu nemá index, může pole oddílu vytvořit nový shlukovaný index a nespojovat se se schématem oddílů 6. Změna normální tabulky na tabulku oddílů nebo změna tabulky oddílů na běžnou tabulku může být provedena pouze použitím shlukovaných indexů, protože u shlukovaných indexů jsou tabulky organizace indexů a přerozdělení tabulek je realizováno rekonstrukcí shlukovaných indexů. Pokud se obyčejná tabulka stane rozdělenou tabulkou, rekonstruujte pole oddílu do shlukovaného indexu a přiřaďte jej k oddílovému schématu, a pokud se tabulka oddílů stane normální tabulkou, rekonstruujte oddílové pole do shlukovaného indexu bez přiřazení oddílového schématu. 7. Pro vytvoření tabulky oddílů musí omezení jedinečnosti obsahovat sloupec oddílu 8. Při vytváření schématu oddílů je nutné zajistit, aby počet skupin souborů odpovídal segmentu rozsahu oddílu funkce a nezáleží na tom, zda je název skupiny souborů zdvojený. 9. Funkce pro rozdělení a schémata rozdělení jsou v databázi, nesměřují k celé instanci 10. Tabulka oddílů je příliš velká na to, aby zabírala velké množství místa na disku, a velikost se po smazání některých polí stále nemění.
Kroky k vytvoření tabulky oddílů 1.1. Příklad vytvoření skupiny souborů Alter Database Test1 Přidat skupinu souborů část1; Alter Database Test1 Add Filegroup part1000; Alter Database Test1 Add Filegroup part2000; Alter Database Test1 přidat souborovou skupinu part3000; Alter Database Test1 přidat soubor part4000; 1.2. Vytvořit příklad souboru a přiřadit skupinu souborů ALTER DATABASE TEST1 PŘIDAT SOUBOR(NAME = test1part1,FILENAME = 'G:\test1part1.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DO FILEGROUP část 1; ALTER DATABÁZE TEST1 PŘIDAT SOUBOR(NAME = test1part1000,FILENAME = 'G:\test1part1000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DO SKUPINY souborů part1000; ALTER DATABASE TEST1 PŘIDAT SOUBOR(NAME = test1part2000,FILENAME = 'G:\test1part2000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DO SKUPINY SOUBORŮ part2000; ALTER DATABASE TEST1 PŘIDAT SOUBOR(NAME = test1part3000,FILENAME = 'G:\test1part3000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DO FILEGROUP part 3000; ALTER DATABASE TEST1 PŘIDAT SOUBOR(NAME = test1part4000,FILENAME = 'G:\test1part4000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) DO FILEGROUP part 4000; 2. Příkladem vytvoření partition funkce je partfun1 CREATE PARTITION FUNCTION partfun1 (int) ROZDÍL OD HODNOTY ('1000', '2000', '3000', '4000') --HODNOTY ('1000', '2000', '3000', '4000') označují, že tabulka bude rozdělena do 5 zón, které jsou rozděleny podle velikosti hodnot v polích, přičemž těchto pět zón je nejmenších - 1000, 1000-2000, 2000-3000, 3000-4000, 4000-největší 3. Příklad vytvoření schématu, přiřazení partition funkce partfun1 a přiřazení souborové skupiny CREATE PARTITION SCHEME partschema1 AS PARTITION partfun1 TO (část1,1000,2000,3000,4000); --Postaveno na několika souborových skupinách part1, part1000, part2000, part3000, part4000 CREATE PARTITION SCHEME partschema2 AS PARTITION partfun1 NA (ČÁST1,[PRIMÁRNÍ],[PRIMÁRNÍ],[PRIMÁRNÍ],[PRIMÁRNÍ]); --Postavené na part1, skupině souborů [PRIMARY], není problém nahradit part1 souborem [PRIMARY], aby to bylo podobné jako stavět na skupině souborů [PRIMARY] CREATE PARTITION SCHEME partschema3 AS PARTITION partfun1 VŠE TO (část 1); --vše postavené na souboru part1 CREATE PARTITION SCHEME partschema4 AS PARTITION partfun1 ALL TO ([PRIMARY]); --vše postavené na souborové skupině [PRIMARY] 4. Příklad vytvoření tabulky oddílů VYTVOŘIT TABULKU parttable1( [ID] [int] NE NULL, [IDText] [Nvarchar] (Max) NULA [Datum] [datetime] NULL) ON [partschema1](ID); vložte do parttable1 hodnoty (1,'1',getdate()-4); vložte do parttable1 hodnoty (1001,'1001', getdate()-3); vložte do parttable1 hodnoty (2001,'2001', getdate()-2); vložit do parttable1 hodnoty (3001,'3001',getdate()-1); vložit do parttable1 hodnoty (4001,'4001', getdate()); 5. Ověřit data tabulky oddílů VYBERTE * Z parttable1; --Vrátí všechny řádky tabulky oddílů VYBERTE ODLIŠNÉ $PARTITION. [partfun1] (4) Z parttable1; --Returns, které rozdělí řádek s hodnotou ID pole 4, patří k VYBERTE * Z parttable1, kde $PARTITION. [partfun1] (ID)=2 --Vrátí všechny řádky ve 2. oddílu, ID je ID pole oddílu Poznámka: Nemůžete použít SELECT * FROM parttable1, kde $PARTITION. [partfun1] (ID)=2 má výsledek, což znamená, že je to rozdělená tabulka, a poslední test 7 tohoto článku je nerozdělená tabulka, ale VYBERTE * Z parttable1, kde $PARTITION. [partfun1] (ID)=2 má stále výsledek
Nové dělení 1. Specifikovat skupinu souborů, která může být použita pro schéma oddílů (přidat skupinu souborů pro schéma oddílů). 2. Upravit partition funkci (přidat datový rozsah partition funkce) ALTER PARTITION SCHEME partschema1 POUŽITO DÁLE [PRIMÁRNÍ] ALTER PARTITION FUNCTION partfun1() SPLIT RANGE ('4500') Vyberte p.partition_number,P.Rows ze sys.indexes i inner join sys.partitions p on p.object_id = i.object_id a i.object_id = object_id('parttable2') pořadí podle 1 --První příkaz, pokud schéma rozdělení používá ALL TO ([PRIMARY]), toto tvrzení není nutné vykonávat --Do druhého příkazu je přidána nová partition, rozsah je 4000-4500 --Třetí tvrzení ověřuje, zda nové rozdělení existuje a zda existují řádky
Delete\Merge partition ALTER PARTITION FUNCTION partfun1() MERGE RANGE ('2000') Rozdělení 1000-2000 bylo zrušeno a sloučeno do 1000-3000 --Nelze spustit ALTER TABLENAME, DROP PARTITION PARTITIONNAME, podobně jako oracle;
Smažte tabulku oddílů a odpovídající skupinu souborů Pořadí mazání je: smažte tabulku oddílů, smažte schéma oddílů, smažte funkci oddílu a nakonec smažte skupinu souborů, přičemž odpovídající soubor je smazán po smazání skupiny souborů
Příklad převodu rozdělené tabulky na normální tabulku a normální tabulky na rozdělenou tabulku DROP TABLE parttable1; VYTVOŘIT TABULKU parttable1( [Id] [int] IDENTITY(1,1) NE NULL, [Jméno] [varchar] (16) NENÍ NULL, [Id2] [int] NE NULL ) ON partschema1(Id2); vložit do parttable1 hodnoty ('1',1); vložit do parttable1 hodnoty ('1001', 1001); vložit do parttable1 hodnoty ('2001', 2001); vložte do parttable1 hodnoty ('3001', 3001); vložit do parttable1 hodnoty ('4001', 4001); 1. Jedinečné omezení vytvořené v tabulce oddílů musí obsahovat sloupec oddílu. ALTER TABULKA PARTTABLE1 PŘIDAT OMEZENÍ PK_prattable1_id PRIMÁRNÍ KLÍČ SHLUKOVANÝ ([ID] ASC) Chybový sloupec 'Id2' je sloupec pro rozdělení indexu 'PK_prattable1_id'. Sloupce rozdělení pro jedinečný index musí být podmnožinou indexového klíče. 2. Vytvořte nový shlukovaný index ve sloupci oddílu id2 a parttable1 je stále rozdělená tabulka vytvořit shlukovaný index CI_prattable1_id2 na parttable1(id2); 3. Sloupec oddílu id2 vytváří neklastrovaný index a parttable1 je stále rozdělená tabulka drop index CI_prattable1_id2 na parttable1; vytvořit neshlukovaný indexový NCI_prattable1_id2 na parttable1(id2); 4. Sloupec nerozdělený sloupec id vytváří shlukovaný index, parttable1 nebo rozdělenou tabulku, což naznačuje, že nerozdělený sloupec může být sloupcem indexu clusteru vytvořit shlukový index CI_prattable1_id na parttable1(id); 5. ID2 sloupce oddílu je přetvořen do neklastrovaného indexu a nepoužívá rozdělovací schéma, parttable1 je stále tabulka oddílů Vytvořte neshlukovaný indexový NCI_prattable1_id2 na parttable1(id2) S (DROP_EXISTING = ZAPNUTO) NA [PRIMÁRNÍ]; 6. Sloupec oddílu id2 je rekonstruován do shlukovaného indexu bez podmínky ON a parttable1 je stále tabulka oddílů drop index CI_prattable1_id na parttable1; drop index NCI_prattable1_id2 na parttable1; vytvořit shlukovaný index CI_prattable1_id2 na parttable1(id2); vytvořit shlukovaný indexový CI_prattable1_id2 na parttable1(id2) S (DROP_EXISTING = ZAPNUTO); 7. Rozdělený sloupec id2 je přetvořen do shlukovaného indexu s podmínkou ON, ale bez použití partitioning schématu, a parttable1 se stává nepartitionovanou tabulkou Vytvořte shlukovaný indexový CI_prattable1_id2 na parttable1(id2) S (DROP_EXISTING = ZAPNUTO) NA [PRIMÁRNÍ]; 8. Sloupec oddílu id2 je přetvořen do shlukovaného indexu a pomocí rozdělovacího schématu se parttable1 stává rozdělenou tabulkou vytvořit shlukovaný index CI_prattable1_id2 na parttable1(id2) WITH (DROP_EXISTING = ON) na partschema1(Id2); 9. Po smazání shlukovaného indexu v 8 výše je parttable1 stále rozdělená tabulka drop index CI_prattable1_id2 na parttable1; 10. Sloupec oddílu ID2 je vytvořen jako shlukovaný index a nepoužívá rozdělovací schéma, a parttable1 se stává nerozdělenou tabulkou vytvořit shlukovaný index CI_prattable1_id2 na parttable1(id2) NA [PRIMÁRNÍ]; 11. Po smazání shlukovaného indexu výše uvedených 10 je parttable1 stále nepartitionovaná tabulka drop index CI_prattable1_id2 na parttable1; 12. Sloupec oddílu id2 je nově vytvořen jako neklastrovaný index, i když je použito oddílovací schéma, stále jde o nerozdělenou tabulku vytvořit neshlukovaný index NCI_prattable1_id2 na parttable1(id2) na partschema1(Id2);
Pokud je rozdělená tabulka převedena na normální tabulku, omezení primárního klíče je odstraněno a index clusteru je znovu vytvořen nebo znovu sestaven do primárního klíče pro pole původního primárního klíče, ale není to spojeno se schématem rozdělení ALTER TABLE Table_name OMEZENÍ PK_NAME S (> VYTVOŘTE SHLUKOVANÝ INDEX PK_NAME NA Table_name(SLOUPEC) S (NA [PRIMÁRNÍ]; nebo ALTER TABULKA Table_name PŘIDAT OMEZENÍ PK_NAME PRIMÁRNÍ KLÍČ SESKUPENÝ (sloupec) S (NA [PRIMÁRNÍ];
Pokud je normální tabulka převedena na rozdělenou tabulku, pokud má být původní primární klíč zachován, omezení primárního klíče se odstraní a primární klíč se vytvoří bez nastavení agregovaného indexu, a poté se vytvoří nový agregovaný index, přičemž se v agregovaném indexu použije schéma rozdělení ALTER TABLE Table_name OMEZENÍ PK_NAME S (> ALTER TABULKA Table_name PŘIDAT OMEZENÍ PK_NAME PRIMÁRNÍ KLÍČ NONCLUSTERED(column) S (NA [PRIMÁRNÍ]; --Vytvořit primární klíč, ale ne nastavit jako shlukovaný index VYTVOŘTE index_name SHLUKOVANÉHO INDEXU NA Table_name(sloupec) NA schématu oddílů (pole oddílu) --Vytvořit nový shlukovaný index, ve kterém je použito rozdělovací schéma
Dotazujte se na celkový počet řádků a velikost rozdělené tabulky, například tabulka je CRM. EmailLog Výkonný sp_spaceused 'CRM. EmailLog';
Dotazujte se na informace o rozdělené tabulce, kolik řádků má každá partition, například tabulka je CRM. EmailLog Vyberte konvertitu(varchar(50), ps.name ) jako partition_scheme, p.partition_number, Konvertit(Varchar(10), ds2.name ) jako souborová skupina, konvertovat(varchar(19), isnull(v.value, ''), 120) jako range_boundary, str(p.rows, 9) jako řádky z sys.indexes i join sys.partition_schemes ps on i.data_space_id = ps.data_space_id Přidejte se k sys.destination_data_spaces DDS na ps.data_space_id = dds.partition_scheme_id Připojte se sys.data_spaces DS2 na dds.data_space_id = ds2.data_space_id join sys.partitions p on dds.destination_id = p.partition_number a p.object_id = i.object_id a p.index_id = i.index_id join sys.partition_functions pf na ps.function_id = pf.function_id LEVÝ JOIN sys. Partition_Range_values v na pf.function_id = v.function_id a v.boundary_id = p.partition_number - pf.boundary_value_on_right KDE i.object_id = object_id('crm. EmailLog') a i.index_id v (0, 1) Objednávka podle p.partition_number
Funkce rozdělení dotazů Vyberte * z sys.partition_functions
Zobrazit architekturu oddílu Vyberte * z sys.partition_schemes Původní adresa:Přihlášení k hypertextovému odkazu je viditelné.
|