Update statement running for too long or not
I'm new to working with this much data (20 million rows) and I don't know what I should expect as far as query duration:
update table set fi开发者_JAVA百科eld = '1234'
No index on field. This statement took 25 minutes. The database is set to Simple Recovery. Does 25 minutes seem too long? Table has 9 columns with small data types <50 varchar.
IF you updated 20M rows in one single transaction, then your time was entirely driven by your IO subsystem: what kind of drives you have, what disk files layout etc. If you have 40 spindles in raid 10 with 4 balanced files and a separate similar battery for the log then the result is worryingly slow. If you tested this with one single MDF that shares the spindle with the LDF on a single consumer quality 5000rpm HDD then your time is amazingly fast.
You are updating 20 Mio records in about 1500s averaging at somrthing of 7000 updates per second. Sounds about right.
- Are there any indexed views referencing that field?
- Is that field published in a (transactional) replication scheme?
- Are other sessions accessing that table at the same time the update is running?
- Are the log and data files stored on separate disks (physical, not two different partitions of the same hardware)?
- Are there any check constraints referencing that field?
- Are there any triggers on that table?
All of these, and likely many other factors, will affect data modification performance.
Otherwise, try batching the update using TOP
and a WHERE
clause that finds only umodified rows.
精彩评论