У меня есть запрос, целью которого является получение записей в соответствии с параметрами поиска. Другие параметры в порядке, но есть одно поле с именем «Член». Когда пользователи помещают часть имени в это текстовое поле «Участник», оно должно возвращать все записи, в которых этот «Участник» был задействован в различных ролях. У меня был довольно сложный запрос, но он был в порядке, и потребовалась секунда, прежде чем было указано предложение where. Мое предыдущее предложение where было похоже на
WHERE (( C.IDNumber LIKE '%11%' AND C.OriginalIDNumber LIKE '%11%'
AND H.UserDisplayName LIKE '%david%' OR C.SubmittedBy LIKE '%david%'
OR J.UserID IN( Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR L.UserID IN( Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR X.DepartmentHead IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR E.DepartmentHead IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR N.UserID IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR O.UserID IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR Y.OrganisationAdmin IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR Y.FinalApprovalAuthority IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR Y.OrganisationFinance IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')
OR Z.UserID IN (Select UserID from USER_PROFILE where UserDisplayName LIKE '%david%')))
AND (C.Status<>'Draft')
J, L, X, E и т. Д. - это разные таблицы, к которым я должен присоединиться. Мне потребовалось больше минуты, и я изменил его в
WHERE (( C.IDNumber LIKE '%11%' AND C.OriginalIDNumber LIKE '%11%'
AND H.UserDisplayName LIKE '%david%' OR C.SubmittedBy LIKE '%david%' OR W.UserDisplayName LIKE '%david%'
OR AA.UserDisplayName LIKE '%david%' OR BB.UserDisplayName LIKE '%david%' OR CC.UserDisplayName LIKE '%david%'
OR DD.UserDisplayName LIKE '%david%' OR EE.UserDisplayName LIKE '%david%' OR FF.UserDisplayName LIKE '%david%'
OR GG.UserDisplayName LIKE '%david%' OR HH.UserDisplayName LIKE '%david%' OR II.UserDisplayName LIKE '%david%'))
AND (C.Status<>'Draft')
путем помещения левого внешнего соединения для таблицы User_Profile с J, L, X, E и так далее. AA, BB, CC и т. Д. - это новые таблицы User_Profile, которые нужно объединить.
Но это все еще занимает 30 секунд, что приводит к ошибке «Timeout Expired», когда я запускаю приложение. Любой другой подход, чтобы сократить время, затрачиваемое на запрос?
Я использую MSSQL 2008.