Tabelle Mitarbeiter:Abfrageoptimierung für ungleiche Datenverbindung
Empid STW --StartWorkTime
------------------------------
1 02:00:00.000
2 03:00:00.000
3 05:30:00.000
Tabelle Order:
Orderid PlaceTime
-------------------------------
1 02:22:22.333
2 02:33:33:555
3 03:44:44:111
4 05:45:45:545
Anfrage wird: Schließen Sie die Aufträge an die Mitarbeiter durch ihre zeitliche Beziehung gesetzt, wie.:
Empid Orderid
--------------------
1 1
1 2
2 3
3 4
Nehmen Sie den letzten Mitarbeiter aus der Arbeitszeit = aktuellen auf Arbeitszeit.
Derzeit meine Lösung ist:
SELECT e.empid, o.orderid
FROM order o
CROSS APPLY
(SELECT TOP(1) e.empid FROM order e
WHERE e.STW < o.placetime
ORDER BY STW DESC) e
Die Lösung funktioniert gut, wenn Tabelle employee
klein ist (order
1 mil Reihen, employee
50rows, seine etwa 30 sec), aber die Leistung sinkt schnell wie employee
erweitert (wenn es 10000s Reihe, dauert es über eine Stunde). Gibt es Lösungen, um einen solchen Fall zu optimieren?
Ich würde Ihnen empfehlen, einfach einen FK auf Bestellung hinzufügen, welcher Mitarbeiter hat es platziert (oder eine Verbindungstabelle) und dann einfach diese Informationen zu pflegen - wird auf lange Sicht viel einfacher sein. –