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


SQL och exekveringsplan

Postades av 2008-11-14 12:18:31 - Magnus Bergström, i forum sql-server/msde, Tråden har 4 Kommentarer och lästs av 1800 personer

Jag sitter pa ett (o)trevligt litet problem med en applikation jag arvt.

Applikationen skickar med jamna mellanrum en fraga till databasen (SQL Server 2000) dar ett antal parametrar skickas in. En av dessa parametrar ar faktiskt en strang som ar en full WHERE-klausul, och darfor ser den lagrade proceduren ut som en lang strang som konkatenerar ihop allting till en SQL frag som sedan kors med hjalp av

<code>
EXEC @QueryString
</code>

Nu ar det sa att denna fraga ar inte direkt snabb, och det hjalps inte av att eftersom sql-fragan skapas genom konkatenering anvands inga parametrar och det skapas ingen vettig exekveringsplan som kan ateranvandas. Eftersom det ar en standdigt aterkommande fraga (kommer med jamna mellanrum fran alla anslutna anvandare) sa far databasen jobba onodigt mycket.

Exempel pa hur det ser ut nu:
<code>
DECLARE @Query VARCHAR(4000)
SET @Query = 'SELECT * FROM tbl WHERE Company = ' + @CompanyID + ' AND ' + @WhereClause';'
EXEC @Query
</code>

Ar det ens lont att undersoka mojligheten att parametisera ut @CompanyID? Kommer fragan att skapa en dynamisk exekveringsplan for den delen av fragan och sedan kora kvarvarande del icke optimerat?
Eller forstor den icke-parametiserade delen fragan helt och hallet?

Finns det kanske ett mycket battre satt att gora det pa som jag helt glomt bort?
Andledningen till att det skickas in en farding WHERE-klausul ar att den kan ha ett dynamiskt antal kriterier och samma kriterie (falt) kan fore komma flera ganger.

Hjalp?


Svara

Sv: SQL och exekveringsplan

Postades av 2008-11-14 13:23:11 - Ola Lindfeldt

Du har antaligen mycket data och saknar index på något fält som används i villkoret.
Parametrisering och exekveringsplan är väl bra men det gör troligen inga underverk för prestandan.


Svara

Sv:SQL och exekveringsplan

Postades av 2008-11-14 14:43:50 - Magnus Bergström

Problemet ar att fragan joinar 7-8 tabeller och da den dynamiska WHERE-klausulen kan vara pa i princip vilket falt som helst (den oversatter ett filter som gar att satta i UI:et) sa har in de falten nagot index. Att lagga till en massa index kommer att forstora prestandan for andra fragor da tabellerna andras ganska friskt.

At ha en bra exekveringplan gor definitivt en del for prestandan. Kor du samma SQL fraga 1 gang och det tar 2 sek, sen kor den direkt igen sa tar den <1 sek. Detta pga SQL Server har exekveringsplanen i minnet. Om du 'hardkodar' parametrarna blir samma fraga langsam igen om du andrar varde i parametern.


Svara

Sv: SQL och exekveringsplan

Postades av 2008-11-17 17:06:02 - Ola Lindfeldt

Det går ju iofs att göra det parametriserat och dynamiskt samtidigt.

Om parametern "P1" ska med:

1. Appenda " AND " & P1Namnet & " = @P1 "
2. Lägg till parametern "@P1", P1Vardet

(detta loopas så nästa varv heter den P2 osv)

Ett annat trix som tillåter dynamiska formulär som anropar en SP,
är att skapa villkoret så här:
WHERE Special=@Specialfield OR LEN(@Specialfield) = 0
(så om @Specialfield inte anges så är inte detta med i villkoret)


Svara

Sv:SQL och exekveringsplan

Postades av 2008-11-17 23:16:38 - Magnus Bergström

ingen dum idé faktiskt...

Får testa att laborera lite med det och återkomma.


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 615
27 953
271 709
5 569
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