Avatar billede bleze Nybegynder
28. januar 2004 - 16:52 Der er 6 kommentarer og
1 løsning

Constraint name på temp tabeller

På denne temp tabel som oprettes fra en SP skal der være en constraint. Spørgsmålet er hvordan man laver constraint temp/local eller hvordan man giver den et uniktnavn da 2 constraints jo ikke kan have samme navn. (SP kaldes samtidigt af mange brugere)

  CREATE TABLE #AllotmentLines (
    AllotmentNumber INT,
    RoomTypeNumber INT,
    DateStamp CHAR (8) COLLATE DATABASE_DEFAULT NOT NULL,
    CurrentCount SMALLINT,
    Adults SMALLINT,
    Children1 SMALLINT,
    Children2 SMALLINT,
      TotalRoomsBooked SMALLINT,
    NumberOfRoomsSoldToday SMALLINT,
    CONSTRAINT [/* PROBLEM HER */ PK_AllotMentLines /* PROBLEM HER */] PRIMARY KEY CLUSTERED
    (
        [AllotmentNumber],
        [RoomTypeNumber],
        [DateStamp]
    ) WITH  FILLFACTOR = 66  ON [PRIMARY]
    )
  ON [PRIMARY]
Avatar billede trer Nybegynder
28. januar 2004 - 17:40 #1
først, du bør ikke angive filgrupper på en temp tabel. Den lagres ikke i din database, men i TEMPDB - faktisk vil den oftes findes i ram.

Constraints kan ikke navngives med temporære navne, så løsningen er at droppe din primær nøgle.  I stedet kan du lave et unikt indeks over de samme kolonner - og unikke indeks må gerne have temporære navne.

CREATE TABLE #AllotmentLines (
    AllotmentNumber INT,
    RoomTypeNumber INT,
    DateStamp CHAR (8),
    CurrentCount SMALLINT,
    Adults SMALLINT,
    Children1 SMALLINT,
    Children2 SMALLINT,
      TotalRoomsBooked SMALLINT,
    NumberOfRoomsSoldToday SMALLINT
)

create unique index #pk_allotmentlines on #AllotmentLines(
        [AllotmentNumber],
        [RoomTypeNumber],
        [DateStamp]
)
Avatar billede bleze Nybegynder
28. januar 2004 - 20:02 #2
Det vigtige er at dette index bliver brugt når jeg inserter og updater hvilket jeg gør måske 10000 gange. Og den storedproc skal være så hurtig som muligt.

update blah
if @@rowcount=0
  insert blah
Avatar billede trer Nybegynder
28. januar 2004 - 20:11 #3
Bare rolig, indekset vil blive brugt.

Vedr. performance: Når du benytter UPDATEs er det vigtigt at du ikke angiver et CLUSTERED indeks på nogen af de kolonner du opdaterer, og du bør bruge option (keep_plan) til at forhindre unødige rekompileringer.

Jeg skrevet nogle artikler om performancetuning af SQL i artikel-afsnittet, måske du kunne have glæde af dem: http://www.eksperten.dk/artikler/Databaser/MS-SQL/

Mvh
Troels
Avatar billede bleze Nybegynder
29. januar 2004 - 13:49 #4
Hvad med fill factor etc på det unique index du laver?
Avatar billede trer Nybegynder
29. januar 2004 - 13:55 #5
Har jeg ikke angivet - hvilket sætter det til standard for din server. Fillfactor har ikke den helt store betydning her. En temporær tabel og indeks vil primært være at finde i RAM og vil kun blive skrevet til TEMPDB hvis det er absolut nødvendigt for SQL Server.

Hvis du vil angive det, så er syntaksen

create unique index #pk_allotmentlines on #AllotmentLines(
        [AllotmentNumber],
        [RoomTypeNumber],
        [DateStamp]
) with fillfactor=66
Avatar billede bleze Nybegynder
29. januar 2004 - 14:10 #6
Tak for hjælpen, jeg har købt dine 3 artikler så du har fået lidt extra points :)
Avatar billede trer Nybegynder
29. januar 2004 - 14:25 #7
Tak, jeg håber så du finder dem brugbare :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester