T SQL View – Znáte Create, Alter, Drop View? Víte co je Indexed view?

Views neboli pohledy mají v databázích a datových skladech své místo. Jedná se o objekty, které je v zásadě výhodné využívat, protože neobsahují data (nezabírají storage). Obsahují pouze dotaz do tabulek. Složitější T SQL view však mohou být náročnější na logické operace zejména při komplikovaných dotazech s více joiny do velkých tabulek. Tato situace se dá zase řešit Indexovanými Views (materializované pohledy).

Views jsou dobrým služebníkem, ale špatným pánem. Neuvážené zakládání Views bez managementu jako na běžícím pásu nevyhnutelně dříve nebo později povede k problémům s performance

K čemu se dá T SQL View použít? Konktétní Tipy

Příklady a situace kdy se dají Views využít by se daly shrnout takto:

  1.  Views jako nástroj Security – Zobrazujete pouze data, která chcete aby někdo viděl a ostatní můžete zakrýt. Můžete si ošetřit práva na view a uživatel nemá přístup do podkladových tabulek
  2. Do Views můžeme shrnout komplexní logiku
    1. Mechanické postupy – Pokud je potřeba neustále dokola joinovat 5 tabulek a aplikovat několik stejných podmínek, proč tuto logiku nezabalit do View a příště se dotazovat do něj než vám z toho hrábne? Standardizujete postup a máte jistotu, že všichni aplikují stejnou logiku.
    2. Agregace nebo složitější dotazy – Views jsou dobrý způsob jak zobrazovat informace nad atomickými daty v agregované podobě.
  3. Views jako nástroj předávání informací s business usery – Nemáte ve firmě power usery a nechcete je pouštět do db, ale přesto uživatelé nějaké znalosti SQL mají? Tím pádem je tu prostor pro zbavení se rutiních požadavků na jednoduché sestavy dat. Udělejte business userům Views s agregovanými daty, načtou si je do kontingenční tabulky a jsou happy…neztratíte celý den vymýšlením reportu.
  4. Budování db reporting architektury – V business intelligence jsou pohledy dobrým nástrojem jak definovat datasety pro reporty a tyto datasety mít v organizované a transparentní podobě pod kontrolou
  5. Možnost vytvářed indexované Views a zrychlit pomalé dotazy

T SQL Syntaxe – Create, Alter, Drop View

1 Vytvoření view = Create View

CREATE VIEW udv_Nazev
AS
SELECT sloupce…
FROM dbo.tabulka
WHERE podmínka;

2) Změna view = Alter view

ALTER VIEW udv_Nazev
AS
SELECT sloupce…
FROM dbo.tabulka
WHERE podmínka;

3) Smazání view = Drop view

DROP VIEW udv_Nazev

Indexed view (materializovaný pohled) a SCHEMABINDING

K tomuto pohledu bychom měli přistoupit pokud chceme využít nějakých výhod vyplývajících z používání View (třeba Security nebo shrnutí komplexity), ale máme složitý a velmi pomalý dotaz, který má velké náklady na logické operace. Využijem tu indexované tsql view a v podstatě tak vytvoříme dynamicky updatovanou tabulku.

Syntaxe – Vytvoříme view a poté hned clusterovaný unique index

CREATE VIEW udv_Nazev
WITH SCHEMABINDING
AS
SELECT sloupce…
FROM dbo.tabulka
WHERE podmínka;

CREATE UNIQUE CLUSTERED INDEX IDX_udv_Nazev ON dbo.udv_Nazev(ID);

Založení indexovaného view a limitace:

  • T SQL View musí být WITH SCHEMABINDING – Znamená to, že view je svázáno se strukturou podkladových objektů. Pokud se pokusíte změnit strukturu podkladové tabulky (např. vymazání/přejmenování sloupce který využívá view), tak vás to změnu nechá udělat až po dropnutí view. Indexované view je tak chráněno proti změnám a má vždy aktuální strukturu
  • Deterministická definice indexovaného view – Toto je občas kámen úrazu. Deterministická definice znamená, že view musí vracet stejné výsledky při aplikaci stejných podmínek. Že to tak být nemusí? Pokud použijeme ve view třeba funkci GETDATE(), tak nám bude view vracet různé výsledky v různém čase a není tak tato podmínka splněna.
  • Ve view musí být odkazováno na objekty ve stejné databázi
  • Ve view nesmí být dotaz do jiných view
  • Nedá se použít klauzule UNION, DISTINCT

Reagovat na příspěvek