Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Dålig prestanda i en SLQ-fråga.

Postades av 2005-05-25 13:46:07 - Raymond Arvidsson, i forum sql-server/msde, Tråden har 4 Kommentarer och lästs av 718 personer

Jag har två tabeller. En med låt oss säga Artiklar. Ett fält - RR_ID. RR_ID är unik.

Den andra tabellen är en loggtabell. Den innehåller en räknare Logg_ID (unik), RR_ID för relation med den andra tabellen, Status och Datum.

Varje gång något ändras på artiklen så lägger man till en post i loggtabellen. Posten talar om den nya statusen. Datum då förändringen görs sparas. En status kan återkomma flera gånger. Man kan alltså sänka status, höja och sänka igen osv.

I Artikel-tabellen har jag 400 poster. I loggtabellen har jag 2400 poster - 6 per artikel.

Det jag vill nu är att få ut ett resultat med artiklar som för tillfället har en viss status, kanske 0, 1 och 2. Senast status kan jag ju titta på Datum och jag vill bara ha en loggpost per artikel så klart och endast vissa typer av status. Alltså alla artiklar som senast fick status 0, 1 eller 2.


Min fråga ser ut som följer:

SELECT dbo.Master.RR_ID
FROM dbo.Logg INNER JOIN
dbo.Master ON dbo.Logg.RR_ID = dbo.Master.RR_ID
WHERE (dbo.Logg.Logg_ID IN
(SELECT TOP 1 Logg_ID
FROM Logg
WHERE Logg.Status IN (0, 1, 2) AND Logg.RR_ID = Master.RR_ID
ORDER BY Datum DESC))

Problemet med denna fråga är att den tar flera sekunder att köra. Om jag kör den i Query Analyzern eller i en VIEW spelar ingen roll. Jag har SQL Server 2000. Det finns garanterat inga prestandaproblem på servern utan det har nåt med min fråga at göra.

Jag har 2400 poster i loggen i mitt exempel. I verkligheten kan det handla om 10-tusentals framöver och då vill jag inte ens tänka på vilka prestandaproblem som kommer att uppstå.

Min fråga är helt enkelt, vad är det för fel? Och hur borde jag ställa frågan istället.
Jag tycker inte mitt exempel borde vara speciellt unikt.


Svara

Sv: Dålig prestanda i en SLQ-fråga.

Postades av 2005-05-25 13:53:06 - Mikael Sand

Testa att använda = som operator istället för IN eftersom du ändå slltid får tillbaka en post.

WHERE (dbo.Logg.Logg_ID =
TOP 1 Logg_ID
FROM Logg
WHERE Logg.Status IN (0, 1, 2) AND Logg.RR_ID = Master.RR_ID
ORDER BY Datum DESC))

Där vinner du nog lite i alla fall.


Svara

Sv:Dålig prestanda i en SLQ-fråga.

Postades av 2005-05-25 15:59:15 - Raymond Arvidsson

Jag tackar ödmjukast! Du har förgyllt min dag! Du har gjort livet värt att leva igen :)

Anrop som tidigare tog 4,8 sekunder tar nu 0,1 sekund! Så "lite tid" vann jag allt. Tack!


Svara

Sv: Dålig prestanda i en SLQ-fråga.

Postades av 2005-05-27 12:26:32 - Ola Lindfeldt

10 tusen räcker nog inte.. Jag har ett system som loggar det mesta som en användare kan göra. Systemet används veckovis av ca 300 användare och loggningen har pågått i 1,5 år. Logtabellen har i dag >500.000 poster. Men det går bra tack vare index. Gör alltid index på de kolumner som du villkorar eller sorterar med.
I ditt fall:
<code>
Logg.RR_ID
Master.RR_ID
Logg.Logg_ID
Logg.Status
Datum
</code>
Denna enkla grundregel gör att du nästan alltid är safe.


Svara

Sv:Dålig prestanda i en SLQ-fråga.

Postades av 2005-05-31 11:42:54 - Raymond Arvidsson

Har testat och det är enorma skillnader! Jag tackar så mycket för hjälpen.


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 619
27 953
271 709
479
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies