Opslags tid på SQL select sætning i Interbase
HejJeg 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))