Ich habe eine Tabelle, in der Notizen gespeichert sind
create tblNote(
Id int identity(1,1),
ParentId int ,
ParentType varchar(32),
NoteType varchar(32),
Note varchar(max),
CreatedBy varchar(25),
CreatedDate datetime,
.
.
.
<other metadata about the note>
)
Ich habe in letzter Zeit viel darüber gelesen, wie MSSS mit Indizes umgeht (2005 und später).
Ich habe einen Clustered-Index für ID
[Ich habe überlegt, den Clustered-Index in parentId, parentType zu ändern, da dieser relativ eng und statisch ist. ]]
Der überwiegende Prozentsatz der Abfragen für diese Tabelle wird im Sinne von erfolgen
select NOTE, createdDate, createdBy
from tblNote
where parentId = 12 and parentType = 'RFQ'
Die Frage, die ich heute stellen möchte (obwohl jedes Feedback willkommen ist), lautet:
Der NC-Index, den ich hinzufügen könnte, ist:
create index idx_nc_note_parent(
parentId ,
parenttype
)
include (createdby, createdDate)
Dies wäre nützlich, um kleine Listen der Notizen zu erstellen, in denen wir angeben können, wer und wann Informationen eingeben sollen.
Ich zögere, ein varchar(max)Feld aufzunehmen. Es scheint, als würde dies die Menge des zwischengespeicherten Index wirklich beeinträchtigen (ist dies vernünftig oder unangemessen)?
Angenommen, ich füge das NOTEFeld nicht hinzu, ist eine RID-Suche erforderlich, um den Notizinhalt tatsächlich abzurufen, wenn er angefordert wird.
Obwohl ich ziemlich viel darüber gelesen habe, wie teuer RID-Lookups sind, muss es immer noch besser sein, diesen Index zu haben, als einen Tabellenscan durchzuführen, RICHTIG?
[Entschuldigung für den Codeblock, ich habe die 4 Leerzeichen hinzugefügt, aber vielleicht habe ich es falsch gemacht? ]]
(parentId, parentType)Kombination zurück?