A table that accepts a trickle of rows can struggle under a firehose. High insert rates begin with the layout. A wide row, a random clustered key, and a stack of nonclustered indexes make every inserted record do extra work. A lean design keeps the write path predictable while preserving the reads the application needs.

Start With the Access Pattern
Define how rows arrive, how users retrieve them, and how old rows leave. A table receiving telemetry events differs from an orders table with updates and relational checks. Inserts per second alone do not describe row size, concurrency, or read demand. Identify whether access is by event ID, tenant, recent time range, or a combination.
I sketch the three paths together: insert, query, and purge. A design optimized for one path can impose costs on the others. An append-only event table can favor a different clustered key from a table whose users repeatedly seek one customer and date. The right layout answers the actual workload. Which read path justifies each index on your busiest insert table?
Keep Rows Narrow for High Insert Rates
SQL Server stores and moves pages, not abstract rows. Wider rows fit fewer per page, consume more buffer pool, and generate more log data. Use appropriate data types and lengths. Avoid repeating large descriptive values on every event if a separate reference table can represent them. Do not split every small attribute into another join merely to chase narrowness.
Variable-length fields and large objects deserve special thought. Put rarely read payloads in a related table when the hot query needs only headers. This preserves a narrow common path while keeping the payload available. I measure the tradeoff because additional joins also have a cost.
Choose a Clustered Key for High Insert Rates
A sequential clustered key gives locality and usually limits random page splits. Under intense concurrency, its last page can become a latch hotspot. A random GUID spreads inserts but increases fragmentation, page splits, and index width. There is no free key. Select based on row volume, concurrency, query order, and operational simplicity.
A narrow, stable key is valuable because the clustered key appears in nonclustered index entries. If business queries need tenant and time ranges, consider whether an index on those columns is better than making a wide composite clustered key. Test the hottest insert and read paths before locking the schema.
Count the Secondary Indexes
Each nonclustered index is another structure to update for every qualifying insert. A few targeted indexes can be essential for reads and relationship checks. Duplicates or speculative covering indexes create a recurring write tax. Compare keys, included columns, and filters. Favor indexes that serve important query families without becoming excessively wide.
This catalog query lists indexes on a proposed target. It is a starting inventory for reviewing write amplification, not a rule that a certain count is too high. Confirm constraints before considering removal.
SELECT name, index_id, type_desc,
is_unique, is_primary_key,
has_filter, filter_definition
FROM sys.indexes
WHERE object_id = OBJECT_ID(N'dbo.Events')
ORDER BY index_id;
Design for Bounded Batches
Applications can insert groups of rows to reduce round trips and commit overhead. The best batch size balances throughput with log use, lock duration, and rollback cost. A table with many indexes can make large batches particularly disruptive. Test using realistic row sizes and concurrent readers, not just a synthetic single-thread import.
A table-valued parameter or staging table can send a batch without constructing a giant VALUES clause. Validate inputs before writing and make retries idempotent. I keep batches small enough that a failure has a clear recovery path. A batch that saves milliseconds but takes hours to unwind after an error is a poor bargain.
Plan Retention at Creation
High insert rates create high data volume. If old rows expire, plan removal before the table becomes enormous. Date-based partitioning can support manageable range operations and, with aligned design, efficient archival or switching. It does not automatically improve insert performance, and the current partition can still be a hot spot.
For smaller systems, indexed range deletes in bounded batches can be simpler. Avoid a nightly delete that removes millions of rows in one transaction. Decide how long data stays, what is archived, and how backups reflect that growth. The retention plan is part of the write design because every inserted row eventually needs a home or an exit.
Watch Page and Log Pressure at High Insert Rates
Track page latch waits, page splits, log flush latency, and file growth during a representative insert run. A fast single-session load can hide last-page contention under many writers. A log file that grows repeatedly can create pauses unrelated to the table key. Pre-size files based on measured growth and leave headroom for busy periods.
This DMV query gives a current view of operational activity for one table’s indexes. Counters are cumulative since their reset and need interval measurements to show rates. Compare samples over the same workload window.
SELECT i.name, os.leaf_insert_count,
os.leaf_allocation_count,
os.page_latch_wait_count,
os.page_latch_wait_in_ms
FROM sys.dm_db_index_operational_stats
(DB_ID(), OBJECT_ID(N'dbo.Events'), NULL, NULL) AS os
JOIN sys.indexes AS i
ON i.object_id = os.object_id AND i.index_id = os.index_id
WHERE i.object_id = OBJECT_ID(N'dbo.Events');Keep Queries Aligned With the Layout
A table built for fast appends still needs useful reads. If users ask for the latest events by tenant, test that exact query with realistic tenant sizes. An index on TenantID, EventTime can help, but it adds insert cost. If only a tiny active subset is queried, a filtered design or separate hot table can be worth examining.
I avoid adding an index in response to each report without revisiting the whole portfolio. Reports can sometimes run from a replica, summary table, or delayed analytical store. Those options add freshness and maintenance questions, so start with measured need. The table should serve its main transactions reliably.
Prove the Sustained Rate
Run a multi-session test long enough to expose log growth, cleanup, and cache effects. Measure sustained rows per second, tail latency, errors, and impact on important reads. Include regular maintenance and retention activity if they overlap production hours. A brief burst can make a design look better than it behaves all afternoon.
High insert rates are earned through a coherent layout, not a single tuning flag. Narrow rows, purposeful keys, restrained indexes, bounded transactions, and a realistic retention plan form the foundation. The best design is the one whose total workload stays predictable as the table grows.
Related reading on this blog: Last Page Insert PAGELATCH_EX Contention Due to Identity Column and Using NEWID vs NEWSEQUENTIALID for Performance.

A high insert rate is not a batch-size trick, it is the result of a disciplined write path.
Published by Pinal Dave on SQLAuthority. More of my work at pinaldave.com.





3 Comments. Leave new
Hi pinal Dave,
I hear the same news and happy that sql now comes in the top layer, But i have a confusion to take a descion whether to go in sybase or stick with Sql
I have a Past Two year of experenice as a Sql DBA + Developer
But now i have the option to work with sql or sybase not both
for next 2 years.
previously so many sybase guys said that u know sybase have the hold in the corprate environment and Nasdaq is running on sybase and all other financial players working on sybase , so they argue that sybase market is good and i am not feel confident with this as i worked with that for copule of months , i bore with the CUI based presentation of sybase
so i want your suggest whether to move or stick with sql
Regards
shashi kant
Hi Shashi,
I agree that sybase as good market now a days when compare to other Databases. I believe Sql also running faster.
Its up to you how you want to build your future.
Thanks,
Chanti
…. but Nasdaq use Oracle for their large systems such as their 40TB Data Warehouse.