From yesterdays post we learned that the clustered index is the placement order of a table’s records in memory pages. When you insert new records, then each record will be inserted into the memory page in the order it belongs.
Rick Morelan’s SSN (555-55-5555) belongs with the 5’s, so his record will be physically inserted in memory between Jonny Dirt and Sally Smith. Is there enough room in this page to accommodate his record without having to move other record(s) to a new page? Yes there is, and afterwards the first memory page is full. If you insert a new record(s), it is inserted into the memory page in the order it belongs.
Next, we have another new record coming in, Vince Verhoff. His record belongs in sequence after Irene Intern, so he will begin occupying the next page of memory.
The clustered index is the placement order of a table’s records in memory pages. When you insert new records, then each record will be inserted into the memory page in the order it belongs.
Page splits arise when records from one memory page are moved to another page during changes to your table. Here we see another new record (Major Disarray) being inserted, in sequence, between Jonny and Rick. Since there’s no room in this memory page, some records will need to shift around. The page split occurs when Irene’s record moves to the second page.
Page splits are considered very bad for performance, and there are a number of techniques to reduce, or even eliminate, the risk of page splits.
Next we’ll see this data entered into the HumanResources.Contractor table, which contains a clustered index on the SSN field.
Notice from the figure above that SSN is set as a primary key. A primary key is a constraint which ensures non-nullability and uniqueness (i.e., no duplicate values) in a field. Only one primary key per table is allowed. When you create a primary key, SQL Server creates two objects: the primary key and an index (which by default is clustered). The data in this table will be physically ordered by SSN. Now insert the first three records into the table.
Let’s use our same assumption that four records fit into a page of memory. These three records would all occupy the same memory page.
So that means there is room in the same memory page for an INSERT to add one additional record to this table, for a total of four records.
In our example, the first memory page is now full, since it contains four records. The second memory page is empty. The layout in the memory page is depicted with the fourth record (highlighted) added between Jonny Dirt and Sally Smith. The two bottom records (Sally Smith and Irene Intern) shifted down to make room for the “Rick Morelan” record to be inserted in proper sequence, according to the value of the clustered field (SSN).
The next insert (for Vince Verhoff – see figure below) goes straight into the second memory page and does not cause a page split. Now look at the SSN values in the table. Now the SSN value of the next record to be added will tell us whether there will be a page split. Any subsequent INSERT with an SSN value within the range 888-88-8889 through 999-99-9998 would go into one of the three available rows in the second memory page.
Any SSN value below 888-88-8888 will cause a page split. The 444-44-4444 Major Disarray value must be inserted in Page 1 between Jonny and Rick, a page split is caused and Irene Intern’s record must move to Page 2. Notice that it won’t take long before almost every insert causes a page split.
NOTE: Please note that this is Level 100 explanation and how the rows are ordered and B Trees are organized are out of the scope of this article.
NOTE1: This article is just a introduction and not a deep dive into the storage structure. Here is the MSDN page for complete reference.
Note: If you want to setup the sample JProCo database on your system you can watch this video. For this post you will want to run the SQLArchChapter4.2Setup.sql script from Volume 3.
When do page splits happen?
- When records from one memory page are moved to another page during changes to your table.
- When records from one memory page are collapsed into fewer pages from excessive deletes.
- When you insert records in order by the clustered index and you table needs to claim more memory space.
Please leave your answer in comment section below with correct option, explanation and your country of resident.
Every day one winner will be announced from United States.
Every day one winner will be announced from India.
A valid answer must contain country of residence of answerer.
Please check my facebook page for winners name and correct answer.
Winner from United States will get Joes 2 Pros Volume 3.
Winner from India will get Joes 2 Pros Volume 3.
The contest is open till next blog post shows up at http://blog.sqlauthority.com which is next day GTM+2.5.
Reference: Pinal Dave (http://blog.SQLAuthority.com)