SQLShack (Magyar)

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:

1

div>

select * from dbo.vEmployeeSalesOrders WITH (NOEXPAND)

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és

az 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

  • Szerző
  • Utolsó Hozzászólás
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)
  • Visual Studio Kód MySQL, valamint MariaDB fejlesztési – augusztus 13, 2020
  • SQL UPDATE szintaxis magyarázta – július 10, 2020
  • NÉZET LÉTREHOZÁSA SQL: a Dolgozó indexelt nézetek az SQL Server – Március 24, 2020

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük