Vista indicizzata

lunedì 31 agosto 2009 - 16.45

Cyberking Profilo | Junior Member

Ciao a tutti,
stavo leggendo su internet come funzionavano le viste di sql server e in particolare quelle indicizzate, da quello che ho pcaito una vista non è nient'altro che una select memorizzata che si avvia ogni volta che la richiamiamo, mentre se non ho capito male una vista indicizzate è come se io creassi una tabella quando faccio il create
e ogni volta che riapro la vista lui non va a ricercare i dati dal db ma li prende direttamente dalla vista, quindi se io creo in partenza una select join magari da tabelle con molti campi per estrarne pochi, poi quando richiamo la vista indicizzata questa fa molto prima perchè ha già i dati memorizzati.

Se è tutto giusto quello che ho capito, vi volevo chiedere
1) come si crea una vista indicizzata
2) avendo bisogno di aggiornare i dati di questa vista una volta sola al giorno, cosa devo fare?

ciao e grazie in anticipo

http://www.trovashop.it

lbenaglia Profilo | Guru

>1) come si crea una vista indicizzata
Definisci una normale vista con l'opzione SCHEMABINDING e definisci su di essa un indice clustered unique.
Esistono tutta una serie di prerequisiti che trovi al seguente link:
http://msdn.microsoft.com/en-us/library/ms191432.aspx

>2) avendo bisogno di aggiornare i dati di questa vista una volta
>sola al giorno, cosa devo fare?
Devi semplicemente aggiornare le tabelle base richiamate dalla vista e penserà SQL Server ad aggiornare l'indice clustered definito sulla vista indicizzata.
Qui trovi i concetti base sulle indexed views:
http://msdn.microsoft.com/en-us/library/ms187864.aspx

>ciao e grazie in anticipo
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Cyberking Profilo | Junior Member

Mi sono letto i link che mi hai mandato, mille grazie, e sono riuscito a creare una vista, ho un dubbio ancora però e cerco di essere il più preciso possibile nel spiegartelo.

Ho creato la vista dalla join, e quando la apro mi ritrovo già tutti i campi, ho l'impressione però che lui comunque riesegua la query

quello che io invece vorrei ottenere e che questi dati siano fissi,la mia join mi tira fuori circa 400 record da circa 100.000
quindi dovendo poi cercare in qui solo 400 vorrei fare la vista che mi contenga solo i 400, ma senza dover rifare la join a ogni richiesta,

quindi la mia domanda è: ho capito bene che la vista indicizzata ha fisso i 400 record e non li va a ricaricare ogni volta?

o mi conviene creare una procedura che mi crei una nuova tabella con i 400 record dentro?

ciao e grazie ancora

http://www.internetdiscount.it

lbenaglia Profilo | Guru

>Ho creato la vista dalla join, e quando la apro mi ritrovo già
>tutti i campi, ho l'impressione però che lui comunque riesegua
>la query
Verificalo osservando il piano di esecuzione.

>quindi la mia domanda è: ho capito bene che la vista indicizzata
>ha fisso i 400 record e non li va a ricaricare ogni volta?
Esatto.

>o mi conviene creare una procedura che mi crei una nuova tabella
>con i 400 record dentro?
Boh, non ho info sufficienti per suggerirti l'architettura più adeguata alle tue esigenze

>ciao e grazie ancora
Prego.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

86Marco Profilo | Expert

CIao ragazzi e scusate se riapro un post un po anticuccio :)

Sapete spiegarmi meglio cosa si intende per vista e la differenza tra vista e vista indicizzata?

:)
Spero di poter ricevere Vs aiuti!
Grazieee
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5