sql 数据库中的数据大小可以小于索引大小吗?

DBO*_*BOn -4 index sql-server partitioning sql-server-2014

SQL Server 表上的索引是否可以比表本身消耗更多的磁盘空间?

我已经阅读了几篇文章并研究了这个和一些专家推荐的表分区,例如,这个 MSDN 论坛问题

为什么和索引可以比实际数据更大?

如何减小索引大小?

在这种情况下如何识别不必要的索引?

Han*_*non 5

一个完全有效的表设置可能是:

CREATE TABLE dbo.A
(
    a int NOT NULL
    , b varchar(30) NOT NULL
    , c varchar(30) NOT NULL
);

CREATE INDEX A_01 ON dbo.A (a, b);
CREATE INDEX A_02 ON dbo.A (a, c);
CREATE INDEX A_03 ON dbo.A (a, c, b);
Run Code Online (Sandbox Code Playgroud)

很明显,索引使用的总空间将超过表本身使用的空间。

索引空间总量可能高于表本身使用的空间量的原因有很多。几个立即想到的:

  • 粗心地选择了我们“索引一切”的索引策略。
  • 数据库引擎优化顾问推荐的每个索引的实现
  • 对于主要只读工作负载(例如数据仓库)上的多种查询组合,有利于查询速度。

如果您在问题中提供表定义以及所有现有索引,则在 T-SQLCREATE TABLE语句中,我们可能会提出改进建议。