---
title: "Vad bör vara mer fördelmässigt ur prestanda synvinkel"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/188618-vad-bör-vara-mer-fördelmässigt-ur-prestanda-synvinkel"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Fredde Mannen"
published: "2011-12-20T15:36:41.000Z"
updated: "2011-12-20T19:27:15.000Z"
replies: 5
views: 714
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/188618-vad-bör-vara-mer-fördelmässigt-ur-prestanda-synvinkel"
---

# Vad bör vara mer fördelmässigt ur prestanda synvinkel

## #1 — Fredde Mannen, 2011-12-20T15:36Z

Som rubriken lyder, vad bör vara mer fördelmässigt ur prestanda synvinkel, detta gäller för Ms SQL Server 2008. 

Vi börjar med variant 1: 

```
INSERT INTO TABELL1(Col1,Col2,Time) VALUES('Value1','Value2', GETDATE())
DELETE FROM TABELL1 WHERE Col1 = 'Value1' AND Time < GETDATE()
```

eller: 

```
IF (SELECT COUNT(Col1) FROM TABELL1 WHERE Col1 = 'Value1') = 0
 BEGIN
   INSERT INTO TABELL1(Col1,Col2,Time) VALUES('Value1','Value2', 
GETDATE())
 END
ELSE
 BEGIN
    UPDATE TABELL1 Set Col2='Value2', Time=GETDATE() WHERE Col1 = 'Value1'
 END
```

Dvs om raden finns uppdatera värden i raden annars lägg in en rad.

Permalänk: https://www.webforum.nu/p/188618

## #2 — clarkbones, 2011-12-20T17:04Z

Enligt Microsoft ska man först köra en update, blir noll rader uppdaterade kör man en insert. Jag vågar dock inte lova att det är snabbast i alla lägen att göra så.

Permalänk: https://www.webforum.nu/p/2289628

## #3 — nitro2k01, 2011-12-20T17:58Z

För övrigt, borde inte effekten av exempel 1 kunna bli att klockan rör sig lite mellan kommandona och att båda raderna (om det finns existerande rader) raderas?

Permalänk: https://www.webforum.nu/p/2289630

## #4 — Fredde Mannen, 2011-12-20T18:51Z

> **[clarkbones skrev:](https://www.webforum.nu/p/1544065)**
>
> Enligt Microsoft ska man först köra en update, blir noll rader uppdaterade kör man en insert. Jag vågar dock inte lova att det är snabbast i alla lägen att göra så.

typ: 

```

UPDATE .... 

IF @@ROWCOUNT = 0
 BEGIN
   INSERT .... 
 END
```

Permalänk: https://www.webforum.nu/p/2289634

## #5 — Fredde Mannen, 2011-12-20T18:53Z

> **[nitro2k01 skrev:](https://www.webforum.nu/p/1544067)**
>
> För övrigt, borde inte effekten av exempel 1 kunna bli att klockan rör sig lite mellan kommandona och att båda raderna (om det finns existerande rader) raderas?

jo, var lite slö skrivandet ... 

```
declare  @currentTime = GETDATE()
```

 

ersätt GETDATE med @currentTime ..

Permalänk: https://www.webforum.nu/p/2289635

## #6 — clarkbones, 2011-12-20T19:27Z

> **[Fredde Mannen skrev:](https://www.webforum.nu/p/1544072)**
>
> typ: 
> 
>
>
> ```
> 
> UPDATE .... 
> 
> IF @@ROWCOUNT = 0
>  BEGIN
>    INSERT .... 
>  END
> ```

Yep!

Permalänk: https://www.webforum.nu/p/2289639

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/188618-vad-bör-vara-mer-fördelmässigt-ur-prestanda-synvinkel
