So the vendors for the call system software ran the code below on the live system on a Friday night. Thanks guys. I’ve changed the name of the tables in the code for security reasons if anyone would like to use this it as an example of how not to write T-SQL code!
The vendors claim the code came from the company that developed the call system and if this is the case I think someone in head office is trying to get fired or get someone fired.
Scroll down for a review of why the code is such a mess.
/* TableOne a 312 million row table TableTwo a 55 million row table TableThree a 22 million row table */ DELETE FROM TableOne WHERE SecurityPolicyId = @p_secPolId AND RecordingId NOT IN ( SELECT c.RECORDINGID FROM TableThree c WHERE ( EXISTS ( SELECT * FROM TableTwo b0 WHERE b0.RecordingID = c.RECORDINGID AND b0.Workgroup = N'CS EMAIL - [Cancellations]' ) OR EXISTS ( SELECT * FROM TableTwo b1 WHERE b1.RecordingID = c.RECORDINGID AND b1.Workgroup = N'CS EMAIL - [Claims]' ) OR EXISTS ( SELECT * FROM TableTwo b2 WHERE b2.RecordingID = c.RECORDINGID AND b2.Workgroup = N'CS EMAIL - [Contact Request]' ) OR EXISTS ( SELECT * FROM TableTwo b3 WHERE b3.RecordingID = c.RECORDINGID AND b3.Workgroup = N'CS EMAIL - [DD Enquiries]' ) OR EXISTS ( SELECT * FROM TableTwo b4 WHERE b4.RecordingID = c.RECORDINGID AND b4.Workgroup = N'CS EMAIL - [Feedback]' ) OR EXISTS ( SELECT * FROM TableTwo b5 WHERE b5.RecordingID = c.RECORDINGID AND b5.Workgroup = N'CS EMAIL - [MTA]' ) OR EXISTS ( SELECT * FROM TableTwo b6 WHERE b6.RecordingID = c.RECORDINGID AND b6.Workgroup = N'CS EMAIL - [NB Cover Query]' ) OR EXISTS ( SELECT * FROM TableTwo b7 WHERE b7.RecordingID = c.RECORDINGID AND b7.Workgroup = N'CS EMAIL - [O/S Documents]' ) OR EXISTS ( SELECT * FROM TableTwo b8 WHERE b8.RecordingID = c.RECORDINGID AND b8.Workgroup = N'CS EMAIL - [Otherl]' ) OR EXISTS ( SELECT * FROM TableTwo b9 WHERE b9.RecordingID = c.RECORDINGID AND b9.Workgroup = N'CS EMAIL - [SME]' ) OR EXISTS ( SELECT * FROM TableTwo b10 WHERE b10.RecordingID = c.RECORDINGID AND b10.Workgroup = N'CS WebChat' ) OR EXISTS ( SELECT * FROM TableTwo b11 WHERE b11.RecordingID = c.RECORDINGID AND b11.Workgroup = N'CUSTOMER SERVICE - [Cancellations]' ) OR EXISTS ( SELECT * FROM TableTwo b12 WHERE b12.RecordingID = c.RECORDINGID AND b12.Workgroup = N'CUSTOMER SERVICE - [CBL enquiry]' ) OR EXISTS ( SELECT * FROM TableTwo b13 WHERE b13.RecordingID = c.RECORDINGID AND b13.Workgroup = N'CUSTOMER SERVICE - [Claims]' ) OR EXISTS ( SELECT * FROM TableTwo b14 WHERE b14.RecordingID = c.RECORDINGID AND b14.Workgroup = N'CUSTOMER SERVICE - [Commercial]' ) OR EXISTS ( SELECT * FROM TableTwo b15 WHERE b15.RecordingID = c.RECORDINGID AND b15.Workgroup = N'CUSTOMER SERVICE - [DD Payment]' ) OR EXISTS ( SELECT * FROM TableTwo b16 WHERE b16.RecordingID = c.RECORDINGID AND b16.Workgroup = N'CUSTOMER SERVICE - [Diary Team]' ) OR EXISTS ( SELECT * FROM TableTwo b17 WHERE b17.RecordingID = c.RECORDINGID AND b17.Workgroup = N'CUSTOMER SERVICE - [Doc Request]' ) OR EXISTS ( SELECT * FROM TableTwo b18 WHERE b18.RecordingID = c.RECORDINGID AND b18.Workgroup = N'CUSTOMER SERVICE - [DocChase CL]' ) OR EXISTS ( SELECT * FROM TableTwo b19 WHERE b19.RecordingID = c.RECORDINGID AND b19.Workgroup = N'CUSTOMER SERVICE - [DocChase FN]' ) OR EXISTS ( SELECT * FROM TableTwo b20 WHERE b20.RecordingID = c.RECORDINGID AND b20.Workgroup = N'CUSTOMER SERVICE - [DocChase IN]' ) OR EXISTS ( SELECT * FROM TableTwo b21 WHERE b21.RecordingID = c.RECORDINGID AND b21.Workgroup = N'CUSTOMER SERVICE - [Life]' ) OR EXISTS ( SELECT * FROM TableTwo b22 WHERE b22.RecordingID = c.RECORDINGID AND b22.Workgroup = N'CUSTOMER SERVICE - [MTA]' ) OR EXISTS ( SELECT * FROM TableTwo b23 WHERE b23.RecordingID = c.RECORDINGID AND b23.Workgroup = N'CUSTOMER SERVICE - [NB Cover Query]' ) OR EXISTS ( SELECT * FROM TableTwo b24 WHERE b24.RecordingID = c.RECORDINGID AND b24.Workgroup = N'CUSTOMER SERVICE - [Other Query]' ) OR EXISTS ( SELECT * FROM TableTwo b25 WHERE b25.RecordingID = c.RECORDINGID AND b25.Workgroup = N'Customer Service Admin' ) OR EXISTS ( SELECT * FROM TableTwo b26 WHERE b26.RecordingID = c.RECORDINGID AND b26.Workgroup = N'OUTBOUND - [Welcome Calls]' ) OR EXISTS ( SELECT * FROM TableTwo b27 WHERE b27.RecordingID = c.RECORDINGID AND b27.Workgroup = N'OUTBOUND CS - [Cancelations]' ) OR EXISTS ( SELECT * FROM TableTwo b28 WHERE b28.RecordingID = c.RECORDINGID AND b28.Workgroup = N'OUTBOUND CS - [DocChase]' ) OR EXISTS ( SELECT * FROM TableTwo b29 WHERE b29.RecordingID = c.RECORDINGID AND b29.Workgroup = N'OUTBOUND CS - [Final Notice]' ) OR EXISTS ( SELECT * FROM TableTwo b30 WHERE b30.RecordingID = c.RECORDINGID AND b30.Workgroup = N'OUTBOUND CS - [Initial Chase]' ) OR EXISTS ( SELECT * FROM TableTwo b31 WHERE b31.RecordingID = c.RECORDINGID AND b31.Workgroup = N'OVERFLOW - [Claims]' ) OR EXISTS ( SELECT * FROM TableTwo b32 WHERE b32.RecordingID = c.RECORDINGID AND b32.Workgroup = N'OVERFLOW - [Customer Service - MTA]' ) OR EXISTS ( SELECT * FROM TableTwo b33 WHERE b33.RecordingID = c.RECORDINGID AND b33.Workgroup = N'RENEWALS - [Personal Enquiries]' ) OR EXISTS ( SELECT * FROM TableTwo b34 WHERE b34.RecordingID = c.RECORDINGID AND b34.Workgroup = N'RENEWALS - [Personal Outbound]' ) OR EXISTS ( SELECT * FROM TableTwo b35 WHERE b35.RecordingID = c.RECORDINGID AND b35.Workgroup = N'RENEWALS - [Personal Payments]' ) ) AND c.RecordingDate >= @p_dateAfter AND c.RecordingDate < @p_dateBefore OR c.RecordingDate < @p_dateAfter OR c.RecordingDate >= @p_dateBefore )
Here are some of the issues with the above in no particular order.
The command is running against a 312 million row table, a 55 million row table and a 22 million row table. Although is was only planned to run once IT STILL NEEDS TO BE EFFICIENT!!!!!
It uses Select Star or (Select *) which raises the probability that SQL Server will query the whole table rather than accessing the data through indexes. Only an Id is needed to begin with.
There are subqueries used when a join would be much faster.
The subqueries are completely unnecessary when WHERE conditions could have been listed in an IN statement.
Correlated subquery!!! Literally designed to bring a server to its knees! Evaluated once for each row processed. See more on correlated sub queries here https://en.wikipedia.org/wiki/Correlated_subquery
There are EXISTS Statements used due to the poor design of the command.
A ridiculously giant case statement used! Typically the comparison data should be written to a temp table and assessed as a join when there are an excessive number of case statements.
Needless to say this query ballooned the tempdb and I’ll let you guess what happened next.
The lesson for today’s posting, trust no one!