J'ai l'instruction select suivante qui se termine presque instantanément.Pourquoi une mise à jour prend beaucoup plus de temps qu'un SELECT?
declare @weekending varchar(6)
set @weekending = 100103
select InvoicesCharges.orderaccnumber, Accountnumbersorders.accountnumber
from Accountnumbersorders, storeinformation, routeselecttable,InvoicesCharges, invoice
where InvoicesCharges.pubid = Accountnumbersorders.publication
and Accountnumbersorders.actype = 0
and Accountnumbersorders.valuezone = 'none'
and storeinformation.storeroutename = routeselecttable.istoreroutenumber
and storeinformation.storenumber = invoice.store_number
and InvoicesCharges.invoice_number = invoice.invoice_number
and convert(varchar(6),Invoice.bill_to,12) = @weekending
Cependant, la déclaration de mise à jour équivalente prend 1m40s
declare @weekending varchar(6)
set @weekending = 100103
update InvoicesCharges
set InvoicesCharges.orderaccnumber = Accountnumbersorders.accountnumber
from Accountnumbersorders, storeinformation, routeselecttable,InvoicesCharges, invoice
where InvoicesCharges.pubid = Accountnumbersorders.publication
and Accountnumbersorders.actype = 0
and dbo.Accountnumbersorders.valuezone = 'none'
and storeinformation.storeroutename = routeselecttable.istoreroutenumber
and storeinformation.storenumber = invoice.store_number
and InvoicesCharges.invoice_number = invoice.invoice_number
and convert(varchar(6),Invoice.bill_to,12) = @weekending
Même si j'ajoute:
and InvoicesCharges.orderaccnumber <> Accountnumbersorders.accountnumber
à la fin de la déclaration de mise à jour en réduisant le nombre d'écritures à zéro, il prend le même laps de temps.
Est-ce que je fais quelque chose de mal ici? Pourquoi y a-t-il une telle différence?
La clause AND supplémentaire est toujours une bonne idée, pourquoi mettre à jour 50 000 lignes lorsque vous avez seulement besoin de mettre à jour 2? – HLGEM