曲演杂坛--页拆分2

在上次的曲演杂坛--页拆分中基于SQL SERVER 2008版本进行了测试,在SQL Server 2012和SQL Server 2014版本中,对页拆分进行了优化,避免了一次插入导致多次页拆分的情况。

让我们在SQL Server 2014版本中来测试下:

--=========================================
--使用TestDB数据库来测试
USE TestDB
GO
DROP TABLE TB01
GO
--=======================================
--创建测试表TB01
CREATE TABLE TB01
(
    ID INT PRIMARY KEY,
    C1 NVARCHAR(MAX)
)
GO
--=======================================
--插入420条数据,所有数据存放在一个8KB的数据页中
INSERT INTO TB01(ID,C1)
SELECT T.RID,N'C' FROM (
SELECT 
ROW_NUMBER()OVER(ORDER BY object_id) AS RID 
FROM sys.all_columns
) AS T
WHERE T.RID<422
AND T.RID<>418
--====================================
--====================================
--插入一行数据
INSERT INTO TB01(ID,C1)
SELECT 418,REPLICATE(N'1',4000)
--====================================
--查看数据页
DBCC IND('TestDB','TB01',1)

--===================================
--查看非叶子节点来查看数据和页的对应情况
DBCC PAGE('TestDB',1,8104,3)

可以发现,本次也拆分只创建了两个新页面,在ID=418的记录插入时,发现页8012上无法存放新记录,便对页8012进行拆分,将数据418之前的数据留在页8012上,把418之后的数据放到新的页面8105上,然后另外申请一个页面存放要插入的ID=418记录。

 

在SQL Server 2012和SQL Server 2014版本中,当第一次页拆分后,还是无法插入新的数据行,那么会创建一个新页来存放该记录,以避免多次页拆分。(尚不知道按照什么算法进行第一次页拆分)

 

--============================================

 

转载于:https://www.cnblogs.com/TeyGao/p/4074425.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值