Kategorie szkoleń | Egzaminy | Kontakt
  • 5
  • 2
  • 129

Odpowiedzi (5)

  • 2

Rozumiem, że chodzi o zrobienie widoku indeksowanego? Robi się to zakładając indeks "clustered" na widoku. Ale do tego potrzebna jest unikalna kolumna. Ewentualnie może być kilka kolumn, które razem posiadają unikalną wartość. Tak jak klucz główny, tak index można zakładać na kombinacji kolumn.

  • Odpowiedział
  • @ | 12.06.2014
  • TRENER ALTKOM AKADEMII
Komentarze
  • 0

Dziękuję za odpowiedź.

Czasem jednak trudno znaleźć odpowiednią kombinację kolumn, która zapewniłaby unikalność. Czy wtedy jestem na przegranej pozycji i nie zrobię widoku indeksowanego? Może dałoby się dodać jakąś kolumnę bazującą na rowid, lub coś podobnego, co zapewniłoby unikalność? Mnie nie udało się tego w żaden sposób zrobić.

Nil
  • Odpowiedział
  • @ Nil | 12.06.2014
    • 2
    • 1
    • 4
  • 0

Dodajesz kolumnę, która posiada właściwość AutoID oraz Auto Increment. Załóżmy, że Twoja kolumna w tabeli nazywa się ID_Key, a za tą kolumną są kolejne np NAME, SURNAME, ADRESS itp.

I teraz po ID_Key odwołujesz się do unikalnego wpisu w tej tabeli.

trols_ps
  • Odpowiedział
  • @ trols_ps | 14.06.2014
    • 2
    • 3
    • 3
  • 0

Dziękuję trols_ps. Tabela nie jest moja, nie mogę jej modyfikować. Mogę operować tylko widokiem.

Próbowałem: 

 

create view xyz.test_mater WITH SCHEMABINDING
as select 
	row_number() over (order by AdresMAC) as ID_KEY,
	net.AdresMAC
from xyz.net
go

create clustered index test_idx
on xyz.test_mater (ID_KEY)

Wynik:

Msg 1941, Level 16, State 1, Line 1Cannot create nonunique clustered index on view 'xyz.test_mater' because only unique clustered indexes are allowed. Consider creating unique clustered index instead.

 

Nil
  • Odpowiedział
  • @ Nil | 14.06.2014
    • 2
    • 1
    • 4
  • 9

Możesz spróbować pogrupować dane w tym zapytaniu, tak żeby mieć jakiś unikalny zestaw kolumn (od biedy możesz pogrupować po wszystkich kolumnach i klucz założyć na wszystkie kolumny). Tylko pytanie, czy taki widok rzeczywiście przyspieszy zapytanie.

Zobacz poniższy przykład:

create table a(p1 int, p2 int)

insert into a values(1,1)
insert into a values(1,2)
insert into a values(1,1)
go
drop view v
go
create view v with schemabinding
as select p1,p2,count_big(*) cnt from dbo.a
group by p1,p2

create unique clustered index ai on v(p1,p2)

  • Odpowiedział
  • @ | 16.06.2014
  • TRENER ALTKOM AKADEMII
Komentarze
Dziękuję za pomoc.
Skomentował : @ Nil ,16.06.2014
  • 2
  • 1
  • 4