শিরোনামে প্রশ্নের উত্তর দেওয়ার জন্য, বি-ট্রি একটি মুছার সময় পুনরায় ভারসাম্যহীন কিনা, অন্তত নিম্নলিখিত ন্যূনতম পরীক্ষার ক্ষেত্রে উত্তরটি হ'ল না বলে মনে হচ্ছে।
নিম্নলিখিত পরিবেশনের জন্য কমান্ডগুলি চালিত হয় যা পরীক্ষার পরিবেশের জন্য সবচেয়ে ভাল থাকে।
--create table and fill it
DROP TABLE IF EXISTS bunchesofints
CREATE TABLE bunchesofints (
thisisanint INT PRIMARY KEY CLUSTERED,
junkrow CHAR(1000) NOT NULL
)
INSERT dbo.bunchesofints
SELECT TOP 5000
ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) AS thisisanint,
REPLICATE('a',1000) AS junkrow
FROM sys.all_objects a1
CROSS JOIN sys.all_objects a2
--with this query we can see all the non-leaf pages of the b-tree, plus the IAM
SELECT allocated_page_page_id, page_type_desc, page_level, is_allocated, next_page_page_id, previous_page_page_id
FROM sys.dm_db_database_page_allocations(DB_ID(),OBJECT_ID('dbo.bunchesofints'),NULL,NULL,'DETAILED')
WHERE page_type != 1
GO
--Ok, let's delete most of the rows
;WITH CTE AS (
SELECT TOP (4500) *
FROM dbo.bunchesofints
ORDER BY thisisanint DESC
)
DELETE
FROM CTE
GO
--Hmm, still have 3 non-leaf index pages
SELECT allocated_page_page_id, page_type_desc, page_level, is_allocated, next_page_page_id, previous_page_page_id
FROM sys.dm_db_database_page_allocations(DB_ID(),OBJECT_ID('dbo.bunchesofints'),NULL,NULL,'DETAILED')
WHERE page_type != 1
--So, where are the rows?
--please note the assumption that your test database has a single file.
DECLARE @firstindexpage INT, @lastindexpage INT, @db INT = DB_ID()
SELECT @firstindexpage = MIN(previous_page_page_id), @lastindexpage = MAX(next_page_page_id)
FROM sys.dm_db_database_page_allocations(DB_ID(),OBJECT_ID('dbo.bunchesofints'),NULL,NULL,'DETAILED')
WHERE page_type = 2 AND page_level = 1
DBCC PAGE(@db,1,@firstindexpage,3) WITH TABLERESULTS
DBCC PAGE(@db,1,@lastindexpage,3) WITH TABLERESULTS
এই ডেমোটি দেখায় যে একটি মোছা একটি ভারসাম্যহীন বি-ট্রি উত্পাদন করতে পারে, প্রায় একদিকে সমস্ত ডেটা সহ।