webForumDet fria alternativet
Logga in / Bli medlem

optimering och sånt

Databaser & SQL

6 svar · 290 visningar · startad av Nöff

Medlem sedan nov. 2003569 inlägg
Trådstart#1

tjena..

har en tabell så som så här:

Tabell1.
ID
namn
efternamn
telenr

Alternativ 1:
SELECT ID,namn,efternamn,telenr FROM tabell1

Alternativ 2:
SELECT telenr,namn,ID,efternamn FROM tabell1

spelar det nån roll vilken ordning man selectar stuffet rent prestandamässigt?. Har det någon performance impact?.

Medlem sedan dec. 1999707 inlägg
#2

Nej, inte i de exemplen du har skrivit där. Det som brukar göra skillnad prestandamessigt är det som man skriver i FROM, WHERE och ORDER. Beroende vilka fält man jämför med eller sorterar på får man kontrollera att det finns index satta, om så krävs för att öka prestandan.

Om jag exempelvis skriver följande uttryck:

SELECT telenr,namn,ID,efternamn FROM tabell1
ORDER BY namn, efternamn

och märker att det går lite väl långsamt så kanske jag ska sätta ett index som inkluderar kolumnerna jag angett i ORDER BY, dvs namn samt efternamn i stigande ordning.

CREATE NONCLUSTERED INDEX IX_namnEfternamn
ON tabell1 (namn asc, efternamn asc)
Medlem sedan nov. 2003569 inlägg
#3

Ok, kan man förresten sätta clustrade index på flera kolumner än PRIMARY KEY?

Medlem sedan dec. 1999707 inlägg
#4

Nope bara ett klustrat index per tabell. Det behöver inte vara primary key däremot och kan vara en eller flera kolumner.

Medlem sedan nov. 2003569 inlägg
#5

Jaså?. Men hur gör man för att sätta ett clustrat index på fler kolumner än PRIMARY KEY ?, eftersom ett clustrat index sätts automatiskt av SQL-servern när man deklarerar en kolumn som är av PRIMARY KEY och sen verkar det vara svårt att bli av med den.

Medlem sedan dec. 1999707 inlägg
#6

För att göra det så måste man först skapa tabellen utan nån PRIMARY KEY, sedan lägga till ett klustrat index på den kolumn man vill ha, och sist lägga på ett PRIMARY KEY-constraint på tabellen. Ex:

create table Tabell1
(
	[id] int not null,
	[name] varchar(50) null
)

create clustered index IX_name ON Tabell1 ([name] asc)

alter table Tabell1
	add constraint PK_Tabell1 primary key ([id])
Medlem sedan dec. 1999707 inlägg
#7

Och om man skulle vilja ha ett klustrat index satta på flera kolumner (ett index alltså):

create table Tabell1
(
	[id] int not null,
	[name] varchar(50) null,
	[description] varchar(50) null
)

[b]create clustered index IX_name ON Tabell1 ([name] asc, [description] asc)[/b]

alter table Tabell1
	add constraint PK_Tabell1 primary key ([id])
388 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
121 ms — deklarationer (db)
124 ms — hämta statistik (db)
139 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)