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