grapz Skrevet 1. april 2008 Del Skrevet 1. april 2008 Hei Har to tabeller (MySQL med MyIsam) (her med de viktigste feltene): tblPerson: ID - Autonummer Fornavn - Varchar Etternavn - Varchar tblResultat: ID - Autonummer Tid - Dato RitterFK - ID til personen fra tblPerson. Alle personer har 1 rad i tblPerson. I tblResultat ligger alle resultat, det kan være flere resultat per RitterFK(tblPerson.ID). Det er også en del personer i tblPerson som ikke har noen resultat i tblResultat. Det jeg trenger er å finne alle rader i tblPerson som ikke har resultat i tblResultat. Det er ca 10,000 rader i tblPerson og 50,000 i tblResultat. Noen som har noe triks? Har prøvd meg på en liten join, men det tar så lang tid jeg bare får timeout i phpMyAdmin. Lenke til kommentar
iver56 Skrevet 1. april 2008 Del Skrevet 1. april 2008 Slik gjør jeg det i access iallfall.. kanskje det hjelper? SELECT tblPerson.ID, tblResultat.RitterFK FROM tblPerson LEFT JOIN tblResultat ON tblPerson.ID = tblResultat.RitterFK WHERE (((tblResultat.RitterFK) Is Null)); Lenke til kommentar
grapz Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 Slik gjør jeg det i access iallfall.. kanskje det hjelper? SELECT tblPerson.ID, tblResultat.RitterFK FROM tblPerson LEFT JOIN tblResultat ON tblPerson.ID = tblResultat.RitterFK WHERE (((tblResultat.RitterFK) Is Null)); Hei Var noe i den duren jeg har kjørt selv, men grunnet mengden med data (50,000 rader som skal joines på 10,000 rader) ser det ut som MySQL serveren min sliter litt (bruker forresten cliche.no, noen som har opplevd problemer med store spørringer der?). Lenke til kommentar
blackbrrd Skrevet 1. april 2008 Del Skrevet 1. april 2008 (endret) Måten nevnt ovenfor er måten det normalt gjøres på. Hvis det går for tregt mangler du kanskje indeks på FK? Alternativt så har serveren det kjøres på for lite ram / for høy load pga andre oppgaver. Sjekket på databaseserveren på jobben og spørringen tar ca 1 sek hvis den returnerer 50000 rader og noen millisekunder hvis den skal returnere 500 rader. (Det er på postgresql 8.3) Endret 1. april 2008 av blackbrrd Lenke til kommentar
grapz Skrevet 1. april 2008 Forfatter Del Skrevet 1. april 2008 Index var nøkkelen ja. Takker så mye. Slo meg egentligt ikke at jeg måtte ha index der, men er jo i bunn og grunn ganske logisk Da virket forresten spørringen din Iver_j veldigt bra Lenke til kommentar
Frank2004 Skrevet 2. april 2008 Del Skrevet 2. april 2008 SELECT tblPerson.ID, tblResultat.RitterFK FROM tblPerson LEFT JOIN tblResultat ON tblPerson.ID = tblResultat.RitterFK WHERE (((tblResultat.RitterFK) Is Null)); Alternativt noe slikt som: select p.id from person p where not exists (select null from resultat r where r.ritter_fk = p.id) At jeg velger NULL fra underspørringen er bare en konvensjon; samme hva resultatet er, vi vil bare (ikke) ha en rad. Lenke til kommentar
blackbrrd Skrevet 2. april 2008 Del Skrevet 2. april 2008 EXISTS har ihvertfall postgresql hatt problemer med å optimize riktig, selv om resultatet burde vært prikk likt på join/exists... :o) Lenke til kommentar
Frank2004 Skrevet 3. april 2008 Del Skrevet 3. april 2008 (endret) EXISTS har ihvertfall postgresql hatt problemer med å optimize riktig, selv om resultatet burde vært prikk likt på join/exists... :o) Njah.. Jeg tilgir planneren for å ikke se at left join + where right pk/fk is null egentlig burde være not exits. Endret 3. april 2008 av Frank2004 Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå