Reputation: 378
I just started learning query tuning and I am looking for some help with a question that was asked of me. This query runs for hours if left as is, but I am told that a small change will make it run in a matter of moments. I have tried several things but can't seem to make it do what I am looking for. Any help would be greatly appreciated
SELECT dt_ARRIVAL, s_PATIENT_FULL_NAME, n_ENCOUNTER_ID, s_VISIT_IDENT, dbo.fn_CheckIfRV(n_ENCOUNTER_ID, dt_ARRIVAL) AS RV, dt_DEPARTURE,
s_OUTCOME_LOCATION, s_DispoLoc, s_LAST_ACUITY, s_COMPLAINT_FOR_SORT, s_DIAGNOSIS_FOR_SORT, s_GENDER, s_AGE,
CASE WHEN Len(dbo.vw_RPT_ADHOC_DATA_DUMP.s_InitLabOrderList) > 4 THEN 1 ELSE 0 END AS LABv21,
CASE WHEN Len(dbo.vw_RPT_ADHOC_DATA_DUMP.s_InitRadOrderList) > 4 THEN 1 ELSE 0 END AS RADv21
FROM dbo.vw_RPT_ADHOC_DATA_DUMP
WHERE (dt_ARRIVAL BETWEEN CONVERT(DATETIME, '2012-08-13 00:00:00', 102) AND CONVERT(DATETIME, '2013-02-13 23:00:00', 102))
Upvotes: 0
Views: 129
Reputation: 11655
Just judging by the "vw" in dbo.vw_RPT_ADHOC_DATA_DUMP it seems that the query is against a view, not a table. Have a look to the inner connect of the view and try to optimize it. Even if the view is optimized you may find that for this specific query you can take some simplifications.
Anyway we would need to see the code of the view to improve our answers, if it is really a view.
Upvotes: 0
Reputation: 57381
SELECT dt_ARRIVAL, s_PATIENT_FULL_NAME, n_ENCOUNTER_ID, s_VISIT_IDENT, dbo.fn_CheckIfRV(n_ENCOUNTER_ID, dt_ARRIVAL) AS RV, dt_DEPARTURE,
s_OUTCOME_LOCATION, s_DispoLoc, s_LAST_ACUITY, s_COMPLAINT_FOR_SORT, s_DIAGNOSIS_FOR_SORT, s_GENDER, s_AGE,
CASE WHEN Len(dbo.vw_RPT_ADHOC_DATA_DUMP.s_InitLabOrderList) > 4 THEN 1 ELSE 0 END AS LABv21,
CASE WHEN Len(dbo.vw_RPT_ADHOC_DATA_DUMP.s_InitRadOrderList) > 4 THEN 1 ELSE 0 END AS RADv21
FROM dbo.vw_RPT_ADHOC_DATA_DUMP,
(select CONVERT(DATETIME, '2012-08-13 00:00:00', 102) as date_from,
CONVERT(DATETIME, '2013-02-13 23:00:00', 102) as date_to) dates
WHERE (dt_ARRIVAL BETWEEN dates.date_from AND dates.date_to)
Try to execte the CONVERT just once, not for each row
Upvotes: 2