Forwarded Records: the Back-Pointer and the Trip Home
This post is part of the series. The contents page lists every part in order. Note: a self-contained MCVE reproducing every result in this post is included at the end - see "The MCVE: run…
Scalar UDFs vs Inline TVFs: Measuring the Damage
Scalar user-defined functions are the most natural thing in the world to write. You have a bit of logic, you wrap it in a function, you call it in your SELECT list, and your query…
What ROW and PAGE Compression Do to the Record
This post is part of the series. The contents page lists every part in order. Data compression is one of the few storage features you can turn on with a single clause and measure the…
Forwarded Records: What an UPDATE Can Do to a Heap
This post is part of the series. The contents page lists every part in order. A heap, a table with no clustered index, has a failure mode that clustered tables do not: an UPDATE that…
Row-Overflow and LOB: When a Row Leaves the Page
This post is part of the series. The contents page lists every part in order. A data page is 8 KB, and a single row is capped at 8,060 bytes of in-row data.[1] So what…
How SQL Server Packs BIT Columns Into a Single Byte
This post is part of the series. The contents page lists every part in order. A common worry about bit columns is that a table full of yes/no flags will waste a byte on every…