Snažil som sa z niekoľkých indexových zobrazení a som ohromený, ale ja som takmer vždy potrebovať max alebo min rovnako a nemôže pochopiť, prečo to nie je "t pracovať s týmito, môže niekto vysvetliť prečo?"
Viem, že nie sú povolené, ja len "t pochopiť, prečo !!! Počet atď je povolené, prečo nie MIN / MAX, ja" m hľadá vysvetlenie ...
odpovede:
72 pre odpoveď č. 1Tieto agregáty nie sú povolené, pretože nemôžu byť prepočítané iba na základe zmenených hodnôt.
Niektoré agregáty, podobne COUNT_BIG()
alebo SUM()
, môže byť prepočítaný len pri pohľade na dáta, ktoré sa zmenili. Tieto sú povolené v rámci indexovaného zobrazenia, pretože ak sa zmení podkladová hodnota, vplyv tejto zmeny možno priamo vypočítať.
Iné agregáty MIN()
a MAX()
, nedá sa prepočítavať len pri pohľade na údaje, ktoré sa menia. Ak zmažete hodnotu, ktorá je v súčasnosti max alebo min, potom sa musí vyhľadať a nájsť nová max alebo min celý stôl.
Rovnaký princíp platí aj pre iné agregáty AVG()
alebo štandardné variačné agregáty. SQL ich nemôže prepočítať len z hodnôt, ktoré sa zmenili, ale musí znovu naskenovať celú tabuľku, aby získala novú hodnotu.
4 pre odpoveď č. 2
Okrem dôvodov, ktoré uviedol Remus, existujemenej praktická potreba podpory MIN a MAX. Na rozdiel od COUNT () alebo SUM (), MAX a MIN sa rýchlo vypočítajú - všetko sa nastavuje len po jednom vyhľadávaní; nemusíte čítať veľa údajov.
1 pre odpoveď č. 3
Súhrnné funkcie ako MIN / MAX aren "t podporované v indexovaných zobrazeniach. Musíte urobiť MIN / MAX v dotaze obklopujúcom zobrazenie.
V indexovanom zobrazení je povolená úplná definícia toho, čo je a nie je povolené tu (SQL 2005).
Citácia:
AVG, MAX, MIN, STDEV, STDEVP, VAR, alebo VARPsúhrnné funkcie. ak AVG (výraz) je špecifikovaný v dotazy odkazujúce na indexované zobrazenie, optimalizátor môže často počítať Ak je zobrazenie vybraté, zobrazia sa potrebné výsledky obsahuje SUM (výraz) a COUNT_BIG (expresie). Napríklad, a indexovaný pohľad Zoznam SELECT nemôže obsahujú výraz AVG (stĺpec 1). Ak zoznam SELECT obsahuje výrazy SUM (stĺpec 1) a COUNT_BIG (column1), SQL Server môže vypočítajte priemer dotazu odkazuje na zobrazenie a špecifikuje AVG (column1).