gpt4 book ai didi

sql-server - SQL Server 聚集索引比实际表大。为什么以及如何修复它?

转载 作者:搜寻专家 更新时间:2023-10-30 20:47:40 26 4
gpt4 key购买 nike

我在 SQL Server 数据库中有几个表,其中聚集索引非常大,高达表大小的 50%,仅用于 ID?

例如:

  • 表 1 3000 万行,10GB 数据,聚簇索引 = 10GB
  • 表 2 4000 万行,2.4GB 数据,聚集索引 = 18GB

获取我正在使用的索引大小的脚本是:https://blog.sqlauthority.com/2016/11/13/find-size-indexes-database-interview-question-week-097/

SELECT
OBJECT_SCHEMA_NAME(i.OBJECT_ID) AS SchemaName,
OBJECT_NAME(i.OBJECT_ID) AS TableName,
i.name AS IndexName,
i.index_id AS IndexID,
8 * SUM(a.used_pages) AS 'Indexsize(KB)'
FROM
sys.indexes AS i
JOIN
sys.partitions AS p ON p.OBJECT_ID = i.OBJECT_ID AND p.index_i = i.index_id
JOIN
sys.allocation_units AS a ON a.container_id = p.partition_id
GROUP BY
i.OBJECT_ID, i.index_id, i.name
ORDER BY
8 * SUM(a.used_pages)

索引代码如下(两表相同):

ALTER TABLE [dbo].[my_Table] 
ADD PRIMARY KEY CLUSTERED ([pkID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

有人可以帮我解决这个问题或帮助解释为什么会这样吗?

索引完全没有碎片(<5%),肯定是聚集索引,它只是有PK在里面吗?每个表中都有一个 nvarchar(max),这会是索引中的“隐藏”内容吗?仍然没有解释为什么它比实际表大?

我使用的是 SQL Server 2016 Standard。

谢谢你,祝你有美好的一天。韦德

最佳答案

我们通常使用超过 1 GB 的初始日志文件来避免更多的 VLF,这有助于更快地恢复并提高性能。并且自动增长应该超过 1 GB,这将严格生成更多的 VLF。

如果您知道您的加载行为,那么您可以分配最大初始大小,这将有助于提高性能,因为它不会每次都去初始化文件。

如果有帮助,请告诉我。

关于sql-server - SQL Server 聚集索引比实际表大。为什么以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com