Ich habe die folgende Abfrage in SSMS2008:Abfragegeschwindigkeit in SQL Server Management Studio (2008) vs NHibernate session.Query
select *
from Measurements
where dt > '2016-01-01 04:00:00'
and dt < '2016-01-01 04:05:00'
and classification = 'heartbeat'
Meine Tabelle hat mehr als 400 Millionen Datensätze in ihm, Herzschlag und andere Daten (I wissen), aber obige Abfrage in weniger als 1 Sekunde (ruft etwa 1500 Datensätze). Es gibt Indizes für die Spalten dt und classification.
Wenn ich diese Abfrage in NHibernate verwenden:
var heartbeats = session.Query<Measurements>()
.Where(m.dt > dtFr &&
m.dt < dtTo &&
m.classification = 'heartbeat')
.ToList();
.. jedoch versagt diese Abfrage. Das einzige, was anders ist (soweit ich sehen kann), ist, dass ich DateTime-Objekte (und dtTo
) verwenden und sie an die linq Ausdruck übergeben. Wenn diese Abfrage jedoch fehlschlägt (Timeout), kann ich die fehlgeschlagene Abfrage kopieren und in SSMS2008 einfügen, und sie wird dort ohne Probleme ausgeführt.
Edit: gestern habe ich viel zu viel Tests und ich habe Dinge durcheinander gebracht. Es scheint, dass die fehlgeschlagene Abfrage nicht ausgeführt wird (keine von SSMS). Ich kann nicht sehen, was ich falsch mache.
Also, was ist die Frage jetzt? Schwer zu helfen, wenn Sie nicht wissen, was Sie tun ... –