Я пытаюсь сделать следующий SQL более эффективным, но еще не достиг успеха, кроме того, что у меня есть. Это работает примерно через 2 минуты, начиная с 800 строк. Я не могу использовать временную таблицу. Какие-либо предложения?Стандартизировать SQL несколько AND/Where
Select POP.Account_Number, IP.IP_Id_Src,
POP.Ip_Name_Full, INFO_Default_Hmp.Date_Solicitation,
INFO.BAL_PRIN_AMT, UDD.USER_DEFINED_5V_14,
POP.Process_Stop_Code, POP.Mail_Code
FROM POP, IP, INFO, INFO_Default_Hmp,
INFO_Participation_Item, UDD
WHERE (INFO.Account_Number=POP.Account_Number
AND INFO.Appl_Id=POP.Appl_Id
AND INFO.Bank_Number=POP.Bank_Number
AND INFO_Default_Hmp.Bank_Number=POP.Bank_Number
AND INFO_Default_Hmp.Account_Number=POP.Account_Number
AND INFO_Default_Hmp.Appl_Id=POP.Appl_Id
AND POP.Bank_Number=INFO_Participation_Item.Bank_Number
AND POP.Appl_Id=INFO_Participation_Item.Appl_Id
AND POP.Account_Number=INFO_Participation_Item.Account_Number
AND INFO_Participation_Item.Involved_Party_Id_Investor=IP.Involved_Party_Id_Investor
AND UDD.Account_Number=POP.Account_Number
AND UDD.Bank_Number=POP.Bank_Number
AND POP.Appl_Id=UDD.Appl_Id)
AND ((POP.Appl_Id='FL'
AND POP.Account_Status_Code='A'
AND INFO.Bal_Prin_Amt>0
AND UDD.User_Defined_5v_14='S1'))
А вы посмотрите на план выполнения? – DrCopyPaste
Ваше заявление объединяет 7 таблиц и применяет некоторые фильтры. Используйте операторы 'JOIN' для соединений и оставляйте только фильтры в операторе' WHERE'. Это не заставит его работать быстрее, но это сделает его доступным для чтения. После этого убедитесь, что столбцы объединения и фильтрации индексируются - ничто не влияет на производительность базы данных, а также индексирование –
Какая база данных вы используете, каков план выполнения, сколько данных есть в исходных таблицах? У вас есть индексы в исходных таблицах? –