table employee:
empid stw --startworktime ------------------------------ 1 02:00:00.000 2 03:00:00.000 3 05:30:00.000
table order:
orderid placetime ------------------------------- 1 02:22:22.333 2 02:33:33:555 3 03:44:44:111 4 05:45:45:545
request is: connect orders employee placed time relationship., like:
empid orderid -------------------- 1 1 1 2 2 3 3 4
assume last employee off work time = current 1 on work time.
currently solution is:
select e.empid, o.orderid order o cross apply (select top(1) e.empid order e e.stw < o.placetime order stw desc) e
the solution works fine when table employee
small (order
1 mil rows, employee
50rows, 30 sec), performance drops employee
expands (when it's 10000s row, takes on hour). there solutions optimize such case?
i first recommend indexes. first, fix query subquery uses employee table (i assume typo in question):
select e.empid, o.orderid order o cross apply (select top(1) e.empid employee e e.stw < o.placetime order stw desc ) e;
you want index on employee(stw, empid)
. see if helps query.
Comments
Post a Comment