Avatar billede djpono Nybegynder
29. januar 2004 - 17:51 Der er 11 kommentarer og
1 løsning

sql søgetid

Jeg har en SQL-sætning som skal finde alle de medlemmer i en DB som ikke længere eksisterer, men som dengang de fandtes abbonerede på nyhedsbrevet.

SELECT [member_old].[member_id], [member_old].[member_email]
FROM member_old, member_new
WHERE member_old.member_news='1' AND member_old.member_id NOT IN (SELECT member_id FROM member_new)
ORDER BY [member_old].[member_email];

Problemet er at computeren hænger sig og jeg undrer om ikke jeg har lavet en fejl som får køretiden til at være unødig lang, er der nogen der ummiddelbart kan se en fejl???
Avatar billede arne_v Ekspert
29. januar 2004 - 18:23 #1
NOT IN kan være slem performance mæssigt - samme med ORDER BY.

Men medmindre du virkeligt har store data mængder bør du ikke hænge
på den.
Avatar billede arne_v Ekspert
29. januar 2004 - 18:23 #2
Hov - mangler der ikke en JOIN betingelse ??
Avatar billede arne_v Ekspert
29. januar 2004 - 18:23 #3
member_old.member_id = member_new.member_id
Avatar billede arne_v Ekspert
29. januar 2004 - 18:24 #4
Uden den må du da generere bjærge af records.
Avatar billede djpono Nybegynder
29. januar 2004 - 18:34 #5
-> arne_v: Jo den mangler men pointen er jo at jeg vil finde alle dem hvor member_old.member_id ikke findes i member_new
Avatar billede djpono Nybegynder
29. januar 2004 - 18:34 #6
jeg har MEGET store mængder data (100.000<)
Avatar billede arne_v Ekspert
29. januar 2004 - 18:42 #7
Er det så ikke:

SELECT member_old.member_id,member_old
FROM member_old LEFT JOIN member_new ON member_old.member_id = member_new.member_id
WHERE membe_new.member_id IS NULL AND member_old.member_news='1'

du har brug for ?
Avatar billede arne_v Ekspert
29. januar 2004 - 18:43 #8
En join uden join betingelse på 100000 og 100000 records giver 10 milliarder
result records, så det er nok forklaringen på at du hænger
Avatar billede djpono Nybegynder
29. januar 2004 - 18:53 #9
tak for hjælpen, jeg ved godt at jeg gjorde noget galt, og at jeg i princippet kan ende med så mange resultater, men har kørt en del andre queries som ikke tog særlig lang tid... derfor undren
post et svar så får du point
Avatar billede arne_v Ekspert
29. januar 2004 - 18:56 #10
ok
Avatar billede arne_v Ekspert
29. januar 2004 - 18:56 #11
Virkede mit 18:42:45 forslag ?
Avatar billede teepee Nybegynder
30. januar 2004 - 10:27 #12
Bare drop member_new i FROM:
FROM member_old, member_new
=>
FROM member_old
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester