Simulieren Vereinigung indizierte Sicht zu machen
-
25-09-2019 - |
Frage
Ich habe das folgende Tabellenschema in SQL Server 2005, und ich möchte es in eine indizierten Sicht denormalize für einige Abfragen ich schreibe, bis ich die strukturellen Änderungen dauerhaft machen.
Die Tabellen werden folgen als
Writing
(
DocumentSerial int
Grader1_ID int
Grade_1 int
Grader2_ID int
Grade_2 int
Grader3_ID int
Grade_3 int
)
Users
(userID int,
firstname,
lastname
)
Ich mag einen Tisch mit einer einzigen Zeile für jedes grader / Klasse / Dokumente Kombination, wo der grader entweder grader 1, grader 2 oder grader 3
Die Ansicht Ich schrieb Anwendungen UNION, so dass es nicht Index tut:
select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
from Writing w inner join User U on w.grader1_id=u.userid
UNION
select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
from Writing w inner join User U on w.grader2_id=u.userid
UNION
select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
from Writing w inner join User U on w.grader3_id=u.userid
Das Problem ist - SQL nicht indizieren kann die Ansicht mit Union ...
Lösung
Warum muss es eine indizierte Sicht sein, wenn Sie eine richtige Tabelle verwenden:
SELECT x.*
INTO normalized_table
FROM (select documentSerial,grader1_id as grader_id, grade_1 as grade ,1 as sequence
from Writing w
join User U on w.grader1_id = u.userid
UNION ALL
select documentSerial,grader2_id as grader_id, grade_2 as grade ,2 as sequence
from Writing w
join User U on w.grader2_id = u.userid
UNION ALL
select documentSerial,grade31_id as grader_id, grade_3 as grade ,3 as sequence
from Writing w
join User U on w.grader3_id = u.userid) x
Ich verstehe, dass Sie wahrscheinlich die Ansicht möchten, so dass Sie den Aufwand nicht über Daten zu synchronisieren. Die einzige andere Alternative ist es, nicht Index der Ansicht ...