|
Oficialūs dokumentai
Aukšto lygio žingsniai kuriant skaidinių lentelę 1. Sukurkite failų grupę (panašią į oracle tablespace), žinoma, negalite jos sukurti, galite sudėti visus skaidinius į vieną failų grupę 2. Nustatykite skaidinio funkciją ir paskirstykite duomenis pagal kokį diapazoną 3. Sukurkite skaidinio schemą, susiekite skaidinio funkciją, taip pat susiekite failų grupę, skaidinio funkcija padalija duomenis į kelis diapazonus, turite susieti kelias failų grupes, žinoma, šiuos skaidinių diapazonus taip pat galite įdėti į tą pačią failų grupę 4. Sukurkite lentelę ir susiekite zonavimo schemą
Aptikta klaida Kai tiesiogiai dešiniuoju pelės mygtuku spustelėsite lentelę, kad eksportuotumėte lentelės struktūrą, negalite eksportuoti skaidinio informacijos, o lentelės skaidinio informaciją galite eksportuoti tik dešiniuoju pelės mygtuku spustelėję duomenų bazės užduoties generavimo scenarijų
Keletas išvadų iš skaidinių lentelės: 1. Skaidyti laukai nebūtinai turi būti indeksuojami 2. Skaidyti laukai gali būti sukurti kaip sugrupuoti indeksai arba negrupiniai indeksai 3. Skaidyti laukai, nesvarbu, ar tai būtų sugrupuoti indeksai, ar nesugrupuoti indeksai, atkuriami į sugrupuotus indeksus be susietų skaidymų schemų, o suskaidyta lentelė tampa nesuskaidyta lentele 4. Konvertuokite įprastą lentelę į skaidytą lentelę, tiesiog sukurkite lentelėje sugrupuotą indeksą ir naudokite skaidymo schemą sugrupuotame indekse. Pavyzdžiui, kai nesuskaidytos lentelės 1 laukas sukuria sugrupuotą indeksą ir yra susietas su skaidymo schema, lentelė konvertuojama į skaidytą lentelę, o suskaidytas laukas yra 1 laukas. 5. Konvertuokite skaidytą lentelę į įprastą lentelę, jei yra skaidinio laukas su indeksu, atkurkite skaidinį lauką kaip sugrupuotą indeksą ir nesusiekite su skaidinio schema, jei skaidinio lauke nėra indekso, skaidinio laukas gali sukurti naują sugrupuotą indeksą ir nesusieti su skaidinio schema 6. Pakeisti įprastą lentelę į skaidinių lentelę arba pakeisti skaidinių lentelę į įprastą lentelę galima tik naudojant sugrupuotus indeksus, nes su sugrupuotais indeksais yra indeksų organizavimo lentelės, o lentelių perskirstymas realizuojamas rekonstruojant sugrupuotus indeksus. Jei įprasta lentelė tampa skaidine lentele, rekonstruokite skaidinio lauką į sugrupuotą indeksą ir susiekite jį su skaidinių schema, o jei skaidinių lentelė tampa įprasta lentele, rekonstruokite skaidinio lauką į sugrupuotą indeksą, nesusiedami skaidinio schemos. 7. Norint sukurti skaidinių lentelę, unikalumo apribojime turi būti skaidinio stulpelis 8. Kuriant skaidinių schemą, būtina įsitikinti, kad failų grupių skaičius atitinka skaidinio funkcijos skaidinių diapazono segmentą, ir nesvarbu, ar failų grupės pavadinimas yra dubliuojamas. 9. Skaidymo funkcijos ir skaidymų schemos yra duomenų bazėje, o ne susiduria su visu egzemplioriumi 10. Skaidinių lentelė yra per didelė, kad užimtų daug vietos diske, o dydis vis tiek nesikeičia ištrynus kai kuriuos laukus
Skaidinių lentelės kūrimo veiksmai 1.1. Rinkmenų grupės sukūrimo pavyzdys keisti duomenų bazės testą1 pridėti failų grupę part1; keisti duomenų bazės testą1 pridėti failų grupę part1000; keisti duomenų bazės testą1 pridėti failų grupę part2000; pakeisti duomenų bazės testą1 pridėti failų grupę part3000; keisti duomenų bazės testą1 pridėti failų grupę part4000; 1.2. Sukurkite failo pavyzdį ir susiekite failų grupę ALTER DATABASE TEST1 PRIDĖTI FILE(NAME = test1part1,FILENAME = 'G:\test1part1.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) Į FILEGROUP part1; ALTER DATABASE TEST1 PRIDĖTI FILE(NAME = test1part1000,FILENAME = 'G:\test1part1000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) Į FILEGROUP part1000; ALTER DATABASE TEST1 ADD FILE(NAME = test1part2000,FILENAME = 'G:\test1part2000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) Į FILEGROUP part2000; ALTER DATABASE TEST1 PRIDĖTI FILE(NAME = test1part3000,FILENAME = 'G:\test1part3000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) Į FILEGROUP part3000; ALTER DATABASE TEST1 PRIDĖTI FILE(NAME = test1part4000,FILENAME = 'G:\test1part4000.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) Į FILEGROUP part4000; 2. Skaidinio funkcijos nustatymo pavyzdys, skaidinio funkcija vadinama partfun1 SUKURTI SKAIDINIO FUNKCIJĄ partfun1 (int) KAIP REIKŠMIŲ DIAPAZONAS ('1000','2000','3000','4000') --VALUES ('1000', '2000', '3000', '4000') rodo, kad lentelė bus padalinta į 5 zonas, kurios skirstomos pagal lentelės laukų reikšmių dydį, penkios zonos yra mažiausios - 1000, 1000-2000, 2000-3000, 3000-4000, 4000-didžiausios 3. Schemos sukūrimo, skaidinio funkcijos partfun1 ir failų grupės susiejimo pavyzdys SUKURTI SKAIDINIŲ SCHEMĄ partschema1 AS PARTITION partfun1 TO (1 dalis, 1000 dalis, 2000 dalis, 3000 dalis, 4000 dalis); --Sukurta ant kelių failų grupių part1, part1000, part2000, part3000, part4000 SUKURTI SKAIDINIŲ SCHEMĄ partschema2 AS PARTITION partfun1 Į (1 DALIS,[PIRMINĖ],[PIRMINĖ],[PIRMINĖ],[PIRMINĖ]); --Pastatyta ant part1, [PRIMARY] failų grupės, nėra problemų pakeisti part1 į [PRIMARY], kad ji būtų panaši į [PRIMARY] failų grupės kūrimą SUKURTI SKAIDINIŲ SCHEMĄ partschema3 AS PARTITION partfun1 ALL TO (1 dalis); --Viskas pastatyta ant part1 failų grupės SUKURTI SKAIDINIŲ SCHEMĄ partschema4 AS PARTITION partfun1 VISI Į ([PIRMINIS]); --visi pastatyti ant [PRIMARY] failų grupės 4. Pertvarų lentelės sudarymo pavyzdys SUKURTI LENTELĘ parttable1( [ID] [int] NE NULINIS, [IDText] [nvarchar] (maks.) NULIS [Data] [datetime] NULL) ON [partschema1](ID); įterpti į parttable1 reikšmes (1,'1',getdate()-4); įterpti į parttable1 reikšmes (1001,'1001',getdate()-3); įterpti į parttable1 reikšmes (2001,'2001',getdate()-2); įterpti į parttable1 reikšmes (3001,'3001',getdate()-1); įterpti į parttable1 reikšmes (4001,'4001',getdate()); 5. Patikrinkite skaidinių lentelės duomenis SELECT * FROM parttable1; --Grąžina visas skaidinių lentelės eilutes SELECT atskiras $PARTITION. [partfun1] (4) IŠ parttable1; --Grąžina, kuriam skaidiniui priklauso eilutė, kurios ID lauko reikšmė yra 4 PASIRINKITE * FROM parttable1, kur $PARTITION. [partfun1] (ID) = 2 --Grąžina visas 2-ojo skaidinio eilutes, ID yra skaidinio lauko ID Pastaba: Negalite naudoti SELECT * FROM parttable1 ten, kur $PARTITION. [partfun1] (ID)=2 turi rezultatą, tai reiškia, kad tai yra skaidyta lentelė, o paskutinis šio dokumento 7 testas yra neskaidyta lentelė, bet SELECT * FROM parttable1, kur $PARTITION. [partfun1] (ID)=2 vis dar turi rezultatą
Naujos pertvaros 1. Nurodykite failų grupę, kurią galima naudoti skaidinių schemoje (pridėkite skaidinių schemos failų grupę). 2. Pakeiskite skaidinio funkciją (pridėkite skaidinio funkcijos duomenų diapazoną) ALTER PARTITION SCHEME partschema1 NEXT USED [PRIMARY] ALTER PARTITION FUNCTION partfun1() SPLIT RANGE ('4500') pasirinkite p.partition_number,p.rows iš sys.indexes i inner join sys.partitions p on p.object_id = i.object_id ir i.object_id = object_id('parttable2') order by 1 --Pirmasis teiginys, jei skaidinio schema naudoja ALL TO ([PRIMARY]), šio teiginio vykdyti nereikia --Prie antrojo teiginio pridedamas naujas skaidinys, diapazonas yra 4000-4500 --Trečiasis teiginys patikrina, ar egzistuoja naujas skaidinys ir ar yra eilučių
Naikinti\Sulieti skaidinį ALTER PARTITION FUNCTION partfun1() MERGE RANGE ('2000') 1000-2000 padalijimas buvo ištrintas ir sujungtas į 1000-3000 --Neįmanoma vykdyti ALTER TABLE TABLENAME DROP PARTITION PARTITIONNAME kaip oracle;
Ištrinkite skaidinių lentelę ir atitinkamą failų grupę Ištrynimo tvarka yra tokia: ištrinkite skaidinių lentelę, ištrinkite skaidinių schemą, ištrinkite skaidinio funkciją ir galiausiai ištrinkite failų grupę, o atitinkamas failas ištrinamas ištrynus failų grupę
Skaidytos lentelės konvertavimo į įprastą lentelę ir įprastos lentelės į suskaidytą lentelę pavyzdys DROP TABLE parttable1; SUKURTI LENTELĘ parttable1( [id] [int] IDENTITY(1,1) NE NULINIS, [Vardas] [varchar] (16) NĖRA NIEKINIS, [Id2] [int] NE NULINIS ) ON partschema1(Id2); įterpti į parttable1 reikšmes ("1",1); įterpti į parttable1 reikšmes ("1001",1001); įterpti į parttable1 reikšmes ("2001", 2001); įterpti į parttable1 reikšmes ('3001',3001); įterpti į parttable1 reikšmes ('4001',4001); 1. Unikaliame apribojime, sukurtame skaidinių lentelėje, turi būti skaidinio stulpelis. ALTER TABLE parttable1 ADD CONSTRAINT PK_prattable1_id PIRMINIO RAKTO CLUSTERED ([ID] ASC) Klaida Stulpelis 'Id2' yra indekso 'PK_prattable1_id' skilimo stulpelis. Unikalaus indekso skaidinių stulpeliai turi būti indekso rakto poaibis. 2. Sukurkite naują sugrupuotą indeksą skaidinio stulpelyje id2, o parttable1 vis dar yra skaidyta lentelė Sukurkite sugrupuotą indekso CI_prattable1_id2 parttable1(id2); 3. Skaidinio stulpelis id2 sukuria nesugrupuotą indeksą, o parttable1 vis dar yra suskaidyta lentelė kritimo indekso CI_prattable1_id2 ant parttable1; Sukurkite nesugrupuotą indekso NCI_prattable1_id2 parttable1(id2); 4. Neskaidytas stulpelio ID stulpelis sukuria grupinį indeksą, parttable1 arba skaidytą lentelę, nurodydamas, kad nesuskaidytas stulpelis gali būti klasterio indekso stulpelis sukurti sugrupuotą indekso CI_prattable1_id parttable1(id); 5. Skaidinio stulpelis ID2 yra atkurtas į nesugrupuotą indeksą ir nenaudoja skaidymo schemos, parttable1 vis dar yra skaidinių lentelė sukurti nesugrupuotą indekso NCI_prattable1_id2 parttable1(id2) SU (DROP_EXISTING = ON) [PRIMARY]; 6. Skaidinio stulpelis id2 rekonstruojamas į sugrupuotą indeksą be ON sąlygos, o parttable1 vis dar yra skaidinių lentelė kritimo indekso CI_prattable1_id ant parttable1; kritimo indekso NCI_prattable1_id2 ant parttable1; Sukurkite sugrupuotą indekso CI_prattable1_id2 parttable1(id2); sukurkite grupinį indekso CI_prattable1_id2 parttable1(id2) SU (DROP_EXISTING = ON); 7. Skaidytas stulpelis id2 atkuriamas į sugrupuotą indeksą su ON sąlyga, bet nenaudojant skaidymo schemos, o parttable1 tampa neskaidyta lentele sukurkite sugrupuotą indekso CI_prattable1_id2 parttable1(id2) SU (DROP_EXISTING = ON) [PRIMARY]; 8. Skaidinio stulpelis id2 perkuriamas į sugrupuotą indeksą ir naudojant skaidymo schemą, parttable1 tampa skaidyta lentele sukurkite sugrupuotą indekso CI_prattable1_id2 parttable1(id2) WITH (DROP_EXISTING = ON) partschema1(Id2); 9. Ištrynus sugrupuotą indeksą 8 aukščiau, parttable1 vis dar yra skaidyta lentelė kritimo indekso CI_prattable1_id2 ant parttable1; 10. Skaidinio stulpelis ID2 sukuriamas kaip sugrupuotas indeksas ir nenaudoja skaidymų schemos, o parttable1 tampa neskaidyta lentele sukurkite grupinį indekso CI_prattable1_id2 parttable1(id2) ON [PRIMARY]; 11. Ištrynus aukščiau pateiktą 10 sugrupuotą indeksą, parttable1 vis dar yra neskaidyta lentelė kritimo indekso CI_prattable1_id2 ant parttable1; 12. Skaidinio stulpelis id2 yra naujai sukurtas kaip nesugrupuotas indeksas, nors naudojama skaidymo schema, ji vis tiek yra neskaidyta lentelė kurti nesugrupuotą indekso NCI_prattable1_id2 parttable1(id2) partschema1(Id2);
Jei suskaidyta lentelė konvertuojama į įprastą lentelę, pirminio rakto apribojimas panaikinamas, o klasterio indeksas atkuriamas arba atkuriamas į pradinio pirminio rakto laukų pirminį raktą, tačiau jis nėra susijęs su skaidymo schema PAKEISKITE LENTELĖS Table_name NUMESKITE APRIBOJIMĄ PK_NAME NAUDODAMI (> SUKURKITE SUGRUPUOTĄ INDEKSO PK_NAME Table_name(stulpelis) SU (ON [PIRMINIS]; arba KEISTI LENTELĘ Table_name PRIDĖTI APRIBOJIMĄ PK_NAME PIRMINIO RAKTO CLUSTERED(column) SU (ON [PRIMARY];
Jei įprasta lentelė konvertuojama į skaidytą lentelę, jei reikia išsaugoti pradinį pirminį raktą, pirminio rakto apribojimas panaikinamas, tada pirminis raktas sukuriamas nenustatant jo kaip agreguoto indekso, tada sukuriamas naujas agreguotas indeksas, o skaidymo schema naudojama agreguotame indekse PAKEISKITE LENTELĖS Table_name NUMESKITE APRIBOJIMĄ PK_NAME NAUDODAMI (> ALTER TABLE Table_name PRIDĖTI CONSTRAINT PK_NAME PRIMARY KEY NONCLUSTERED(COLUMN) SU (ON [PRIMARY]; --Sukurkite pirminį raktą, bet nenustatykite kaip grupinio indekso SUKURKITE SUGRUPUOTĄ INDEKSO index_name Table_name(stulpelis) skaidinio schemoje (skaidinio laukas) --Sukurkite naują grupinį indeksą, kuriame naudojama skaidymo schema
Pateikite užklausą dėl bendro eilučių skaičiaus ir skaidytos lentelės dydžio, pvz., lentelė yra CRM. El. pašto žurnalas exec sp_spaceused "CRM. EmailLog";
Užklauskite informacijos apie skaidytą lentelę, kiek eilučių turi kiekvienas skaidinys, pavyzdžiui, lentelė yra CRM. El. pašto žurnalas Pasirinkite konvertuoti(varchar(50), ps.name ), kaip partition_scheme, p.partition_number, convert(varchar(10), ds2.name ) kaip failų grupę, convert(varchar(19), isnull(v.value, ''), 120) kaip range_boundary, str(p.rows, 9) kaip eilutės iš sys.indexes i prisijunkite prie sys.partition_schemes ps i.data_space_id = ps.data_space_id Prisijunkite prie sys.destination_data_spaces DDS ps.data_space_id = dds.partition_scheme_id Prisijunkite prie sys.data_spaces DS2 dds.data_space_id = ds2.data_space_id Prisijunkite prie sys.partitions p dds.destination_id = p.partition_number ir p.object_id = i.object_id ir p.index_id = i.index_id Prisijunkite prie sys.partition_functions pf ps.function_id = pf.function_id LEFT JOIN sys. Partition_Range_values v pf.function_id = v.function_id ir v.boundary_id = p.partition_number - pf.boundary_value_on_right KUR i.object_id = object_id('crm. EmailLog') ir i.index_id (0, 1) Tvarka pagal p.partition_number
Užklausos skaidinio funkcijos Pasirinkite * iš sys.partition_functions
Peržiūrėkite skaidinio architektūrą Pasirinkite * iš sys.partition_schemes Pradinis adresas:Hipersaito prisijungimas matomas.
|