Re: Poor Query
От | Pierre-Frédéric Caillaud |
---|---|
Тема | Re: Poor Query |
Дата | |
Msg-id | opsilr02qxcq72hf@musicbox обсуждение исходный текст |
Ответ на | Re: Poor Query (Pallav Kalva <pkalva@deg.cc>) |
Ответы |
Re: Poor Query
|
Список | pgsql-performance |
Your suffering comes from the "where ba.bankaccountID = u.bankaccountID" in the subselect. It means postgres has to run the subselect once for each row in Users. You want the subselect to run only once, and return one (or more?) bankaccountid's, then fetch the users from Users. Just remove the "where ba.bankaccountID = u.bankaccountID" ! > select userID, fname, lname, email, phone, dateEntered, dateCanceled, > dateSuspended, billAmount, billDate, dateBilled, datePaid, '?' as > searches > from Users u > where bankaccountid in (select bankaccountid > from bankaccount ba > where ba.bankaccountID = u.bankaccountID > and ba.accountnumber = '12345678' > and ba.routingNumber = '12345678') > order by UserID desc > limit 500 New version : select userID, fname, lname, email, phone, dateEntered, dateCanceled, dateSuspended, billAmount, billDate, dateBilled, datePaid, '?' as searches from Users u where bankaccountid in (select bankaccountid from bankaccount ba WHERE ba.accountnumber = '12345678' and ba.routingNumber = '12345678') You could also do this : select u.* from Users u, bankaccount ba where u.bankaccountid = ba.bankaccountid and ba.accountnumber = '12345678' and ba.routingNumber = '12345678')
В списке pgsql-performance по дате отправления: