/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Langsom stored Procedure - Nemt HVOR - men~
Fra : PipHans


Dato : 15-09-03 18:38

Hj,

Plz, jeg har brug for noget info (sql2000) :)

En stored Procedure (SP) er som denne:

"Select table1.id, table1.txt, (select table2.nr from table2 where
table2.fk_table1=table1.id) as nr where table1.id<>10"

Essensen her er at "select table2.nr from table2 where
table2.fk_table1=table1.id" returnerer enten en integer i table2.nr, eller
NULL hvis der ikke er en match. Hele sætningen kører EXTREMT langsomt .3-4
sec. Havd er der galt?

"select table2.nr from table2 where table2.fk_table1=table1.id" kører
hurtigt udenfor SP. Den originale sætning uden "nr" (Select table1.id,
table1.txt where table1.id<>10) kører også hurtigt...

Men sammen kører de meeget langsomt? Jeg skulle måske pointere at
sub-query'en returnerer NULL hvis der ikke er en match i table2...men jeg
kan ikke se hvorfor det skulle gøre SP'en så langsom (Husk den kører jo fint
udenfor SP'en)?

Thx,
PipHans


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.518 / Virus Database: 316 - Release Date: 11-09-2003



 
 
Peter Lykkegaard (15-09-2003)
Kommentar
Fra : Peter Lykkegaard


Dato : 15-09-03 19:40

PipHans wrote:

> "Select table1.id, table1.txt, (select table2.nr from table2 where
> table2.fk_table1=table1.id) as nr where table1.id<>10"
>
Har du prøvet med joins?
Dit eksempel giver en fejl i QA

> Essensen her er at "select table2.nr from table2 where
> table2.fk_table1=table1.id" returnerer enten en integer i table2.nr,
> eller NULL hvis der ikke er en match. Hele sætningen kører EXTREMT
> langsomt .3-4 sec. Havd er der galt?
>
Din sql statement bliver kørt for hver record i din "master"

> "select table2.nr from table2 where table2.fk_table1=table1.id" kører
> hurtigt udenfor SP. Den originale sætning uden "nr" (Select table1.id,
> table1.txt where table1.id<>10) kører også hurtigt...
>
Ret beset så burde du bruge (table1.id < 10 Or table1.id >10)

> Men sammen kører de meeget langsomt? Jeg skulle måske pointere at
> sub-query'en returnerer NULL hvis der ikke er en match i table2...men
> jeg kan ikke se hvorfor det skulle gøre SP'en så langsom (Husk den
> kører jo fint udenfor SP'en)?
>
Definer fint
Hvad har du af indexes på de to tabeller?
Er table2.fk_table1 og table1.id samme type?

Prøv den her i stedet

Select table1.id, table1.txt, table2.nr
from table1 left outer join table2
on table2.fk_table1=table1.id
where (table1.id < 10 Or table1.id >10)

I mit meget "lille" testmiljø så giver de samme resultat, det var også hvad
jeg forventede
Har du andre specielle konstruktioner i din statement?
Antal records, antal rækker i tabellerne?

mvh/Peter Lykkegaard



PipHans (15-09-2003)
Kommentar
Fra : PipHans


Dato : 15-09-03 21:15

Peter Lykkegaard wrote:

> Definer fint
> Hvad har du af indexes på de to tabeller?
> Er table2.fk_table1 og table1.id samme type?

Fint = alm. hurtigt.

Tak for svar....eksemplet var taget ud af hukommelsen og helt igennem meget
forenklet ifht de rigtige data. Jeg havde håbet på at der måske var en kendt
fejl mht sub-querys i SQL2000 :) - Eller måske bare med sub-querys som ikke
har en returværdi (NULL)...

Jeg vil lige tage et drop af den rigtige SP imorgen...og vender tilbage ;=)

--
PipHans


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.518 / Virus Database: 316 - Release Date: 11-09-2003



PipHans (15-09-2003)
Kommentar
Fra : PipHans


Dato : 15-09-03 21:33

Peter Lykkegaard wrote:

> Har du prøvet med joins?
> Dit eksempel giver en fejl i QA

Har lige prøvet følgende:
SELECT table1.id, (select table2.nr from table2 where
table2.fk_table1=table1.id) AS nr, table1.txt
FROM table1
WHERE (((table1.id)<10));

Og den kører fint....det er en tilsvarende der kører superlangsomt i SQL2000
men her i Access kører det fint?

/PipHans


---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.518 / Virus Database: 316 - Release Date: 11-09-2003



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408521
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste