In Firebird kann man sich doch bestimmt auch den EXPLAIN PLAN/ANALYSE ausgeben lassen und sieht ob und welcher Index verwendet wird.
Mal probiert den JOIN umzudrehen?
Im Beispiel hat Tabelle2 mehr Einträge.
FROM Tabelle1 JOIN Tabelle2
> für jeden Eintrag in Tabelle 1 alle vielen Einträge in Tabelle 2 durchsuchen (NULL steht nicht im Index, also FullScan und Index ignoriert)
FROM Tabelle2 JOIN Tabelle1
> für jeden Eintrag in Tabelle 2 die wenigen Einträge in Tabelle 2 durchsuchen
Oder halt die Variante ohne JOIN.
SQL-Code:
SELECT *
FROM Tabelle1
WHERE NOT exists(
SELECT true
FROM Tabelle2
WHERE Tabelle1.CoNummer = Tabelle2.CoNummer
AND Tabelle1.Status = Tabelle2.Status
LIMIT 1
)
Das SubSelect kann nun einen Index gut ausnutzen, wenn der über CoNummer+Status geht.
Keine Ahnung, ob EXISTS schon so schlau ist und die Felder (hier nur ein True) ignoriert, weil sie niemals genutzt werden,
und bereits ein LIMIT verwendet, da ja schon ab dem ersten Fund das Ergebnis feststeht.