Oprettet man. d. 01. maj 2006 kl. 11:31:07

bitbiter
bitbiter (12.790 point. Point ude: 830)

Opslags tid på SQL select sætning i Interbase

Hej

Jeg har et problem med sørgetiden for en SQL select sætning i Interbase. min sætning ser således ud:

SELECT REGNO, FNAME, TESTSTOP
FROM BMTEST
JOIN VEHICLE v
  ON BMTEST.GUIDVEHICLE = v.GUIDVEHICLE
LEFT JOIN CUSTOMER c
  ON BMTEST.GUIDCUSTOMER = c.GUIDCUSTOMER
JOIN INFO i
  ON BMTEST.IDXINFO = i.IDXINFO
WHERE v.REGNO = 'AB1234'
________________________________

FNAME er i tabellen CUSTOMER og TESTSTOP i tabel INFO. Problemet er at sørgetiden for denne sætning er på 2,5 sek. Hvis jeg fjerner LEFT i "LEFT JOIN CUSTOMER c" kommer min sørgetid ned på 3ms. Men da GUIDCUSTOMER godt kan være NIL er dette ikke en mulig løsning. Det lader til Interbase ikke vil bruge det index jeg har lavet på INFO tabellen når jeg bruger LEFT JOIN. Er der nogle der ved hvorfor sørgetiden bliver så meget dårligere bare fordi jeg bruger et LEFT JOIN og hvad men evt. kan gøre ved det.

PLAN sætning med LEFT JOIN:
PLAN MERGE (SORT (I NATURAL),SORT (JOIN (JOIN (V INDEX (REGVEH_INX),B INDEX (INFOVEH_INX)),C INDEX (RDB$PRIMARY2))))

PLAN sætning uden LEFT JOIN:
PLAN JOIN (V INDEX (REGVEH_INX),B INDEX (INFOVEH_INX),I INDEX (RDB$PRIMARY4),C INDEX (RDB$PRIMARY2))

Skrevet man. d. 01. maj 2006 kl. 21:28:18| #1

kjulius
kjulius (28.496 point)
Jeg skal ikke gøre mig klog på Interbase, da jeg ikke kender den, men når jeg ser på din SQL sætning, er der en ting som slår mig.

Normalt bør man så vidt muligt placere en LEFT OUTER JOIN efter INNER JOINs, med mindre man . Medmindre databasemotoren tager højde for det i den execution plan den udarbejder, kan det gøre programmet en del langsommere, ikke at overholde den regel. Som sagt kender jeg intet til Interbase, så måske kan den allerede optimere for rækkefølgen, men hvis ikke...

Jeg ville prøve at flytte din LEFT JOIN ned til sidst:

SELECT REGNO, FNAME, TESTSTOP
FROM BMTEST
JOIN VEHICLE v
  ON BMTEST.GUIDVEHICLE = v.GUIDVEHICLE
JOIN INFO i
  ON BMTEST.IDXINFO = i.IDXINFO
LEFT JOIN CUSTOMER c
  ON BMTEST.GUIDCUSTOMER = c.GUIDCUSTOMER
WHERE v.REGNO = 'AB1234'

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Google translate OFFLINE

Oprettet den 26. oktober 2010 kl. 11.36
formkage giver 15 point for svar | Giv et svar »

BeoCom 6000 telefon

Oprettet den 16. august 2010 kl. 17.50
jyttemode giver 30 point for svar | Giv et svar »

Backup/Restore af Firebird database

Oprettet den 1. marts 2010 kl. 16.21
dennish giver 30 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger