Ez a negyedik cikk egy sor tanulás a Create VIEW SQL utasítás. Eddig sokat tettünk a nézetek T-SQL használatával történő létrehozásáért és megváltoztatásáért. Ebben az utolsó részben, azt akarom, hogy egy nagy pillantást, hogyan kell dolgozni indexelt nézetek.
mint mindig, a sorozattal együtt nagyon ajánlott először elolvasni az előző részeket, majd ezt., Ez elsősorban azért van, mert a saját mintaadatbázisunkat és benne lévő objektumokat a semmiből hoztuk létre, amit ebben a részben is használni fogunk, de azért is, mert sokkal könnyebb lesz látni a nagy képet.
Itt vannak az előző három darab a NÉZET LÉTREHOZÁSA SQL sorozat:
- Létrehozása kilátás nyílik az SQL Server
- Módosítása kilátás nyílik az SQL Server
- Behelyezése adatok keresztül kilátás nyílik az SQL Server
Szóval, feje fölött, majd olvassa el azokat a folytatása előtt ezt az egyet.
Bevezetés
az első dolog, amit csinálunk, egy indexelt nézet létrehozása., Mi lesz, természetesen, használja a Create VIEW SQL utasítás erre, mint mi sokszor a sorozat. De az általános elképzelés, amint azt a cím is mondja, az, hogy megnézzük, hogyan kell dolgozni az indexelt nézetekkel, megnézzük, hogy milyen követelmények vannak egy index hozzáadásához egy nézethez, és hogyan kell programozottan csinálni. Továbbá, hogy elmagyarázza a profik indexelt nézetek, fogunk nézni kivégzések tervek SQL Server. Ezek egy nagyszerű eszköz DBAs és a fejlesztők, amikor a megállapítás és rögzítése szűk keresztmetszet a lassú futás lekérdezés.,
minden további Nélkül, hozzunk létre egy nézet használata a NÉZET LÉTREHOZÁSA SQL utasítás az alábbi látni, hogy mit csinál:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
A SQLShackDB;
UGRÁS
NÉZET LÉTREHOZÁSA dbo.,a vmogeesalesorders
a SCHEMABINDING
mint
válassza ki az alkalmazottakat.EmployeeID,
termékek.ProductID,
SUM(ár * mennyiség) mint SaleTotal,
SaleDate
a dbo-tól.Alkalmazottak
csatlakozzon a dbo-hoz.Értékesítés alkalmazottak.EmployeeID = Értékesítés.EmployeeID
csatlakozzon a dbo-hoz.Termékek értékesítése.ProductID = Termékek.ProductID
csoport az alkalmazottak.EmployeeID,
termékek.ProductID,
értékesítés.,SaleDate;
GO
|
vegye figyelembe, hogy ez a nézet a SÉMAKÖTÉSI opcióval rendelkezik. Az ok, amiért ez az opció be van kapcsolva, az az, hogy a nézetek indexeinek létrehozásakor valójában fizikailag tárolódnak az adatbázisban. Más szóval, bármi, amire ez a nézet támaszkodik, ami a táblázatokat illeti, a szerkezet nem változhat attól, amit hivatkozunk.
ezért azt a mögöttes táblákhoz kell kötni, hogy ne tudjuk módosítani őket oly módon, hogy az hatással legyen a nézet definíciójára., Ha bármilyen módon megpróbáljuk megváltoztatni őket, az SQL Server hibát fog dobni, mondván, hogy ez a nézet valamitől függ. Szóval, nézd meg, mint egy kemény követelmény létrehozása index egy nézet.
miután a parancs sikeresen végrehajtásra került, látnia kell a Vemployeesalesorders nézetet az Object Explorer Views mappájában az alábbiak szerint:
a nézet meghatározása egy kicsit összetettebb lekérdezés. Van egy aggregátum a SELECT nyilatkozatban, amelyet a csoport záradék követ., Ne feledje, ha van egy aggregátum a lekérdezésben, akkor összeadja a számokat, ezért a csoportot záradékkal kell rendelkeznünk.
alapvetően, ha van egy csoport egy lekérdezés, meg kell csoportosítani mindent, ami a select listán, kivéve az aggregátum.,
most már létrehoztam a nézetet, de ne feledje, hogy mindig jó ötlet kipróbálni a nézet meghatározását, ha csak a nézet létrehozása SQL utasítás SELECT részét futtatja, hogy megnézze, mit ad vissza:
mozgás, itt ellenőrizheti, hogy a séma kötött opció engedélyezve van-e vagy le van tiltva., LÉPJEN az objektum felfedezőhöz, bontsa ki a nézeteket, kattintson a jobb gombbal a nézetre, majd válassza a Tulajdonságok lehetőséget:
az összes többi információ között a tulajdonságok megtekintése ablakban láthatja, hogy a séma kötött opció igaz vagy hamis értékre van-e állítva az Általános oldal alatt.
indexelt nézetek létrehozása
lépjünk tovább, és hozzunk létre egy indexet a nézetünkben., Consider the script from below for creating a clustered index on the vEmployeeSalesOrders view:
1
2
3
4
5
6
|
USE SQLShackDB;
GO
CREATE UNIQUE CLUSTERED INDEX CAK_vEmployeesSalesOrders
ON dbo.,vEmployeeSalesOrders(EmployeeID, ProductID, SaleDate);
UGRÁS
|
Ha elérjük a Végrehajtás gombra SSMS, SQL Server fog dobni egy hiba, mondván, hogy az index nem hozható létre:
Itt a teljes hibaüzenetet, hogy nem lehet látni a képen fent:
Nem tudja létrehozni a többképes nézet ‘SQLShackDB.dbo.a VMSZ szerint azért, mert a kiválasztott lista nem tartalmazza a COUNT_BIG megfelelő használatát. Fontolja meg a COUNT_BIG (*) hozzáadását a lista kiválasztásához.,
ebben az esetben COUNT_BIG-re van szükségünk, tekintettel arra, hogy a csoportunkat a mi nézetünkben használjuk.
általában, ha olyan aggregátumokat használunk, mint a COUNT, SUM, AVG stb. az index select listáján a COUNT_BIG-et is fel kell vennünk, hogy indexet hozzunk létre rajta.
pontosan ezt fogjuk tenni.,használata a NÉZET LÉTREHOZÁSA SQL utasítást, majd add hozzá a COUNT_BIG, hogy a választási lista segítségével a szöveg az alábbi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
A SQLShackDB;
UGRÁS
ALTER VIEW dbo.,a vmogeesalesorders
a SCHEMABINDING
mint
válassza ki az alkalmazottakat.EmployeeID,
termékek.ProductID,
SUM (ár * mennyiség) as SaleTotal,
SaleDate,
COUNT_BIG (*) AS RecordCount
FROM dbo.Alkalmazottak
csatlakozzon a dbo-hoz.Értékesítés alkalmazottak.EmployeeID = Értékesítés.EmployeeID
csatlakozzon a dbo-hoz.Termékek értékesítése.ProductID = Termékek.ProductID
csoport az alkalmazottak.EmployeeID,
termékek.ProductID,
értékesítés.,SaleDate;
UGRÁS
|
Ha kíváncsi vagy, miért történik ez ebben az esetben, a válasz az, hogy mert az SQL Server kell követni a száma a rekordot, fordulunk az index pedig ez is az egyik egy csomó korlátozások létrehozása indexelt nézetek.
eddig minden jól néz ki. Sikeresen megváltoztattuk nézetünk meghatározását:
most visszatérhetünk egy index létrehozásához a nézetben, ha még egyszer végrehajtjuk a korábban használt szkriptet., Ezúttal a művelet zökkenőmentesen befejeződik. Ha elmegyünk Object Explorerben, majd bontsa ki az Indexek mappát a kilátás, látni fogjuk, az újonnan létrehozott index:
innen, ha jobb egérgombbal az index, majd válassza a Tulajdonságok alapján az Általános oldalon láthatja a nézet nevét, index neve, típusa, key oszlopok, stb.,:
Ha cserélünk át Tároló, látni fogod, hogy van egy Filegroup, mert fizikailag tárolt adatbázis:
Továbbá ha cserélünk át, hogy a megosztottság, meg kell mondanom, hogy Teljes töredezettség nulla százalék mert csak néhány rekordok a táblázatok:
Keresek egy részletes, de szórakoztató, könnyen olvasható alapozó fenntartására vonatkozó, valamint a monitoring SQL indexek? Nézze meg az SQL index karbantartását.,
indexek törlése
mielőtt tovább mennénk, nézzük meg, hogyan törölhetünk egy indexet. A legegyszerűbb módja az, hogy kattintson a jobb gombbal az Indexre az Objektumkezelőben, majd használja a Törlés opciót. De abban az esetben, ha egyszerre több indexet kell leesnie, a CSEPPINDEX nyilatkozat hasznos. Ezt fogjuk tenni, mert végül is ez egy T-SQL sorozat a nézet létrehozása SQL utasítás megtanulásáról.,
Use the script from below to drop the CAK_vEmployeesSalesOrders index:
1
2
3
4
5
|
USE SQLShackDB;
GO
DROP INDEX CAK_vEmployeesSalesOrders ON dbo.,vEmployeeSalesOrders;
UGRÁS
|
Ha kell dobni, több indexek, csak adja meg, az összes neveket vesszővel elválasztva.
Véletlenszerű adatok generálása
most, hogy megszabadultunk az Indextől, generáljunk néhány véletlenszerű adatot a táblázatunkban, hogy megnézzük a végrehajtási tervet, és megnézzük, hogy az SQL Server hogyan tölti le az adatokat a motorháztető alatt. A végrehajtási terv elemzése megmutatja a különbséget abban, hogy a teljesítményt hogyan befolyásolja a Lekérdezés futtatása index nélkül a nézetben.,
használja a szkriptet alulról, hogy 50000 véletlenszerű rekordot helyezzen be az értékesítési táblázatba:
nem fogom részletesen végigvezetni a szkriptet, de alapvetően egy hurok, amely 50000-szer végrehajtja, és véletlenszerű adatokat helyez be az értékesítési táblázatba., hogy ellenőrizze, ha a rekordok ki sikeresen, hajtsa végre az alábbi VÁLASSZA ki a nyilatkozatot, hogy beleszámít az összes rekordot az Értékesítési táblázat:
1
2
3
4
|
A SQLShackDB;
UGRÁS
SELECT COUNT(*) Az Értékesítési
|
A száma visszatért azt mutatja, hogy van 50006 sor az Értékesítési táblázat., Ez a rekordok száma, hogy csak generált + 6, hogy kezdetben volt:
Elemzése kiviteli tervek
Most, hogy van néhány adat a táblázat tudjuk bizonyítani a használata egy index a kilátás. Kérdezzük meg a vEmployeeSalesOrders nézetet, majd nézzük meg, hogy az SQL Server beolvassa az adatokat., Before executing the SELECT statement from below, make sure to include the Actual Execution Plan as shown below:
1
2
3
4
|
USE SQLShackDB;
GO
SELECT * FROM dbo.,ez a szkript 23814 Sort adott vissza, de ami még fontosabb, az a lekérdezés végrehajtási tervét generálta. Ne feledje, hogy korábban csökkentettük az indexet a véleményünkre. Tehát jelenleg nincs index a nézetünkben. Ezért, SQL Szerver pár táblázat vizsgál az alábbiak szerint:
Ez a legrosszabb dolog az adatbázis világ, különösen a táblázatok a nagy mennyiségű adatok., Nem baj, ha a táblázatok kis mennyiségű adatot tartalmaznak, például az alkalmazottak és a termékek táblázatait, de ez rossz az értékesítési táblázatnak, mert 50K+ rekordokkal rendelkezik. a táblázat beolvasásának legegyszerűbb módja egy index létrehozása rajta, mert drámaian felgyorsítja a dolgokat. Tehát a probléma megoldása érdekében újra végrehajtjuk a szkriptet az egyedi fürtözött index létrehozásához a vEmployeeSalesOrders nézetben. most, ha csak újra futtatjuk a SELECT nyilatkozatot, akkor nem lesz különbség, annak ellenére, hogy csak létrehoztuk az indexet. Miért van ez?, Mert én használ az SQL Server Express edition erre a sorozatra, és csak az Enterprise and Developer editions of SQL Server lesz a Query Optimizer ténylegesen figyelembe az index. nincs gond, mert valójában kényszeríthetjük az SQL Server-t egy index használatára végrehajtási tervek létrehozásakor. Ez a NOEXPAND opció használatával történik., A NOEXPAND csak az indexelt nézetekre vonatkozik:
csak így kényszerítettük az SQL Server-t a fürtözött index használatára, ami alapvetően azt jelenti, hogy nem használjuk az alapul szolgáló táblákat az adatok lekérésekor., Mint alább látható, sikerült előrelépnünk, megszüntetésével műveletek száma:
az A helyzet, hogy executeboth VÁLASSZA ki a nyilatkozatok egyszerre, majd összehasonlítani az eredményeket nézi a kiviteli tervek:
nézd ezt? Ha összehasonlítjuk az első SELECT utasítás lekérdezési költségeit (w / o index 95%) a második SELECT utasításhoz (w/ index 5%), Azt mondanám, hogy ez egy hatalmas teljesítménynövekedés egyetlen index használatával., következtetésaz indexek nagyszerűek, mert felgyorsítják a teljesítményt, és egy mutatóval a nézet szerint valóban fel kell gyorsítania a teljesítményt, mert az index az adatbázisban van tárolva. Mind a nézetek, mind a táblázatok indexelése az egyik leghatékonyabb módja annak, hogy javítsuk az azokat használó lekérdezések és alkalmazások teljesítményét. szeretném lezárni a dolgokat, és befejezni ezt a sorozatot a tanulás a Create VIEW SQL utasítás ezzel a cikkel. Nagyjából mindent lefedtünk a nézetek T-SQL-vel történő létrehozásával és megváltoztatásával kapcsolatban., A Create VIEW SQL utasítással kezdtük, létrehoztunk néhány nézetet, megváltoztattuk őket, töröltük, és még sok más. remélem, hogy ez a sorozat a tanulás a Create VIEW SQL utasítás volt informatív az Ön számára, és köszönöm, hogy elolvasta., NÉZET LÉTREHOZÁSA SQL: Behelyezése adatok keresztül kilátás nyílik az SQL Server NÉZET LÉTREHOZÁSA SQL: Dolgozik indexelt nézetek az SQL Server
Bojan más néven “Boksi”, egy AP diplomás a Technológia összpontosított Hálózatok, illetve az elektronikus technológia a Koppenhágai Iskola, Design, Technológia, egy szoftver elemző a tapasztalat, minőségbiztosítás, szoftver támogatás, a termék evangelizáció, valamint a felhasználói elkötelezettség.,
széles körben írt mind az SQL Shack, mind az ApexSQL megoldási központról, olyan témákról, mint a 4K felbontás és a theming, a hibakezelés az indexstratégiákig, valamint a Teljesítményfigyelés. Bojan dolgozik ApexSQL Nis, Szerbia szerves részeként a csapat összpontosítva tervezése, fejlesztése, tesztelése céljából a következő generációs adatbázis eszközök, beleértve a MySQL, valamint az SQL Server, mindkettő önálló, eszközök, valamint az integrációs a Visual Studio, SSMS, valamint VSCode., további információk Bojan a LinkedIn összes Megtekintése hozzászólások Bojan Petrovics Legújabb hozzászólások Bojan Petrovics (minden)
|