---
title: "Snabba upp sql-fråga"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/164255-snabba-upp-sql-fråga"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Addeladde"
published: "2007-09-07T15:15:51.000Z"
updated: "2007-09-10T08:27:36.000Z"
replies: 5
views: 383
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/164255-snabba-upp-sql-fråga"
---

# Snabba upp sql-fråga

## #1 — Addeladde, 2007-09-07T15:15Z

Hej  

Jag har en sql-fråga som är skriven för Sybase SQL-Anywhere 9 som ser ut enligt följande:

```
SELECT AN.PERSONID, A.GRUPP FROM AKTIVITET AS A
LEFT JOIN GRUPP AS G ON A.GRUPP = G.GRUPP
LEFT JOIN KURS AS K ON G.KURS = K.KURS
LEFT JOIN ANSTALLNING AS AN ON A.SIGNBETYG = AN.SIGN
LEFT JOIN UTBILDNING AS U ON A.PERSONID = U.PERSONID
WHERE A.ENHET = 'XX'
AND U.ENHET = 'XX'
AND (U.STOPPDATUM IS NULL OR U.STOPPDATUM > GETDATE())
AND A.STARTDATUM <= GETDATE()-10
AND A.STOPPDATUM >= GETDATE()+10
AND AN.PERSONID IS NOT NULL
AND A.GRUPP IS NOT NULL
GROUP BY AN.PERSONID, A.GRUPP
```

Den tar dock väldigt väldigt lång tid att köra. Finns det något sätt jag kan snabba upp den på?

Execution plan ger följande resultat

> Node Statistics
> 
> \*
> Estimates
> \*
> Description
> \*
> RowsReturned
> 
> 1\.5256
> 
> Number of rows returned
> PercentTotalCost
> 
> 99\.985
> 
> Run time as a percent of total query time
> RunTime
> 
> 0\.40253
> 
> Time to compute the results
> CPUTime
> 
> 0\.16925
> 
> Time required by CPU
> DiskReadTime
> 
> 0\.23328
> 
> Time to perform reads from disk
> DiskWriteTime
> 
> 0
> 
> Time to perform writes to disk
> DiskRead
> 
> 194\.4
> 
> Disk reads
> DiskWrite
> 
> 0
> 
> Disk writes
> 
> Subtree Statistics
> 
> \*
> Estimates
> \*
> Description
> \*
> RowsReturned
> 
> 1\.5256
> 
> Number of rows returned
> PercentTotalCost
> 
> 100
> 
> Run time as a percent of total query time
> RunTime
> 
> 0\.40259
> 
> Time to compute the results
> CPUTime
> 
> 0\.16931
> 
> Time required by CPU
> DiskReadTime
> 
> 0\.23328
> 
> Time to perform reads from disk
> DiskWriteTime
> 
> 0
> 
> Time to perform writes to disk
> DiskRead
> 
> 194\.4
> 
> Disk reads
> DiskWrite
> 
> 0
> 
> Disk writes
> 
> Optimizer statistics
> 
> \*
> Value
> \*
> Description
> \*
> Costed subplans
> 
> 14
> 
> Number of different enumeration strategies considered by the optimizer
> Estimated cache pages
> 
> 64009
> 
> Estimated cache pages available for this statement
> CurrentCacheSize
> 
> 523788
> 
> Current cache size in kilobytes
> Isolation_level
> 
> 0
> 
> Controls the locking isolation level
> Optimization_goal
> 
> All-rows
> 
> Optimize queries for first row or all rows
> Optimization_level
> 
> 9
> 
> Reserved
> Optimization_workload
> 
> Mixed
> 
> Controls whether optimizing for OLAP or mixed queries
> ProductVersion
> 
> 9\.0.2.2451
> 
> Product version
> User_estimates
> 
> Override-magic
> 
> Controls whether to respect user estimates
> 
> Select list
> AN.PERSONID
> 
> char(11)
> A.GRUPP
> 
> char(20)

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

## #2 — LarsG, 2007-09-09T15:09Z

Varför har du left join då du ändå ställer villkor på de högra tabellerna i din where-klausul?

Se till att de kolumner som finns i join-villkoren är indexerade. Förmodligen kan index på enhet också hjälpa.

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

## #3 — Addeladde, 2007-09-09T18:20Z

Vad gör det för skillnad om jag byter från left join till outer join?
Jag ställer ju frågor på flera tabeller. 

Tyvärr kan jag inte skapa index då jag bara har läsrättigheter på databasen tyvärr.

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

## #4 — LarsG, 2007-09-10T07:59Z

En left join är en (av tre varianter av) outer join. Jag menade att du skulle byta till inner join (och ta bort villkoren med is not null), eftersom det i alla fall blir samma resultat med dina nuvarande where-villkor. 

Utan vettiga index kan du aldrig få någon bra prestanda om du inte har små datamängder.

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

## #5 — Addeladde, 2007-09-10T08:09Z

Om vi nu får adminrättigheter och sätter några index så kan det inte göra att något i andra applikationer som använder databasen börjar fungera annorlunda?

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

## #6 — spango, 2007-09-10T08:27Z

Ja, insert/delete/update av indexerade fält är normalt långsammare än på oindexerade fält. Men att foreign keys inte är indexerade låter nästan som en bugg i mina öron. Tanken är ju att man *ska* joina på sådana fält, och om man inte har index när man gör joins blir det segt.

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/164255-snabba-upp-sql-fråga
