Hallo,

explizites casten bringt nichts, da der Optimizer wie zuvor erwähnt nur Zugriffwege, die über die Original-Spalten generiert wurden verwenden kann. Wenn Du ein Feld castest, veränderst Du es und damit ist die Verwendung eines Zugriffspfades über diese Spalte unmöglich.

M.E. bewirkt der Subselect, dass für beide Tabellen ein Table Scan erfolgen muss.
Versuch mal die Abfrage wie folgt umzuschreiben:
PHP-Code:
Wit x as (Select Bmkonzbmbedarfnrsum(bmvmen) as Menge
            from pbestlo
            Where bmKonz 
'100' and bmfirm '001'
            
group by bmkonzbmbedarfnr)
select terminkont.*, Menge
  from terminkont join x 
on bmkonz 
mandant and mandant '100' and bmbedarfnr bedarfNr
  where ktr 
666 and block '10'

oder

PHP-Code:
Select terminkont.*, Menge
   from terminkont join 
(select bmkonzbmbedarnrsum(mbvmen) as Menge
                           from pbestlo
                           where bmkonz 
'100' and bmfirm '001'
                           
group by bmkonzbmbedarnr)
        
on bmkonz mandant and mandant '100' and bmbedarf bedarfnr
   Where ktr 
666 and block '10' 
Sofern ich mich nicht vertan habe, sollte der Optimizer jetzt in der Lage sein, zumindest für eine Tabelle einen Index zu verwenden, wenn nicht sogar für beide.
Vorausgesetzt entsprechende Zugriffswege (Mandant, KTR, Block, bmkonz, bmfirm) vorhanden sind und das Ergebnis nicht mehr als ca. 20% aller Datensätze betrifft.

Birgitta