Šis straipsnis yra veidrodinis mašininio vertimo straipsnis, spauskite čia norėdami pereiti prie originalaus straipsnio.

Rodinys: 21847|Atsakyti: 0

[Komunikatas] "SQL Server" skaidytų lentelių suvestinė

[Kopijuoti nuorodą]
Paskelbta 2021-07-13 13:52:31 | | |

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.




Ankstesnis:"Kafka Windows" sistema tam tikrą laiką užstrigs
Kitą:SQL Server DBCC DROPCLEANBUFFERS neleistinas?
Atsakomybės apribojimas:
Visa programinė įranga, programavimo medžiaga ar straipsniai, kuriuos skelbia Code Farmer Network, yra skirti tik mokymosi ir mokslinių tyrimų tikslams; Aukščiau nurodytas turinys negali būti naudojamas komerciniais ar neteisėtais tikslais, priešingu atveju vartotojai prisiima visas pasekmes. Šioje svetainėje pateikiama informacija gaunama iš interneto, o ginčai dėl autorių teisių neturi nieko bendra su šia svetaine. Turite visiškai ištrinti aukščiau pateiktą turinį iš savo kompiuterio per 24 valandas nuo atsisiuntimo. Jei jums patinka programa, palaikykite autentišką programinę įrangą, įsigykite registraciją ir gaukite geresnes autentiškas paslaugas. Jei yra kokių nors pažeidimų, susisiekite su mumis el. paštu.

Mail To:help@itsvse.com