Wenn DateTime, aber (beide Seiten) ohne Zeitanteil, kann man sich Cast as Date sparen.
Wenn mit Zeitanteil und :EingabeDatum ohne Zeitanteil dann eher sowas:
where Datum between :von and :bis
:von wird im Programm mit sowas wie Trunc(Now) und :bis mit Trunc(Now + 1) - 1 / 86400000 (= eine Millisekunde) gefüllt, das ergibt dann sinngemäß sowas wie
where Datum between 25.06.2024 00:00:00.000 and 25.06.2024 23:59:59.999
Dann dürfte der Index auch genutzt werden können.
Geht es nur um das Datum ohne Zeitanteil sollte
where datum >= Cast(:Eingabedatum as Date) and datum < Cast(:Eingabedatum + 1 as Date)
funktionieren. Wenn :Eingabedatum ohne Zeitanteil geliefert wird, verkürzt sich das dann auf
where datum >= :Eingabedatum and datum < :Eingabedatum + 1
Der Flaschenhals im Ausgangs-
SQL dürfte aber die spaltenweisen Summierungen per Sub-Select sein. Hier muss die Datenbank eine sehr große Menge von Abfragen starten, je Ergebniszeile vier Stück und die jeweils ohne 'nen Index verwenden zu können.