У меня есть этот запрос, который занимает не менее 1 минуты для запуска. Он использует много левых объединений. Есть ли способ сделать это быстрее? Я новичок в SQL, поэтому помощь будет оценена.Можем ли мы оптимизировать этот SQL-запрос?
SELECT
distinct cnt.last_name,
cnt.bus_ph_num,
cnt.email_addr,
usr.login,
cnt.fst_name,
cnt.fk_id
from
contact cnt
LEFT JOIN
transaction tran
ON tran.id=cnt.fk_id
left join
party party
on party.pk_id=cnt.fk_id
left join
user usr
on usr.fk_id=cnt.fk_id
left join
role role
on
usr.role_id = role.pk_row_id
where
cnt.status_cd=1
and party.fk_id= 'xyz'
and (
usr.login like '%somevalue%'
and (
tran.txn_trk_num is null || tran.txn_trk_num like '%somevalue%'
)
and cnt.last_name like '%somevalue%'
and cnt.email_addr like '%somevalue%'
and cnt.busin_ph_num like '%somevalue%'
)
and (
tran.txn_trk_num is null || tran.txn_typ=1 || tran.txn_typ=2 || tran.txn_typ=3
)
and (role.role_name ='ROLE_ADMIN')
это не проблемный человек .... попробуйте это http://blog.sqlauthority.com/2009/01/20/sql-server-rules-for-optimizining-any-query-best-practices-for-query-optimization/ или http://www.codeproject.com/Articles/35665/Top-10-steps-to-optimize-data-access-in-SQL-Server –
как «%» соответствует всем, так почему это так в вашем запросе? –
Также верно, что «tran.txn_trk_num имеет значение null || tran.txn_trk_num, как«% », немного глупо, поскольку он ищет значение NULL, которое соответствует чему угодно. Если вы можете предоставить информацию о предполагаемых отношениях между этими таблицами/ожидаемыми результатами, тогда это было бы полезно –