如何故意将 SQL Server 索引分段?

mor*_*oro 9 index sql-server clustered-index

我想在我拥有的 SQL Server 2017 测试数据库上故意创建坏索引条件,只是为了更好地理解这些维护脚本?SQL Server 索引和统计维护

是否有一种快速/自动的方法来破坏索引完整性或增加索引碎片?您知道我可以查看哪些有用的资源来实现这一目标吗?

Eva*_*kas 10

我可以想象的一种快速方法是创建一个UNIQUEIDENTIFIER作为主键的表并插入大量随机值。这可以使用这个脚本来实现:

CREATE TABLE dbo.Tests (Id UNIQUEIDENTIFIER PRIMARY KEY);
GO
INSERT INTO dbo.Tests (Id)
WITH x AS (SELECT n FROM (VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) v(n))
SELECT NEWID()
FROM x AS x1, x AS x2, x AS x3, x AS x4, x AS x5, x AS x6;
Run Code Online (Sandbox Code Playgroud)

这将生成数百万行。

知道这NEWID()并不能保证任何顺序,SQL Server 将不得不插入到表中的随机点 - 这将分割主键。