A completely valid table setup might be:
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);
Pretty clearly, the total space used by the indexes will be more than the space used by the table itself.
There are many reasons why the total amount of index space might be higher than that used by the table itself. Several that immediately come to mind:
- Carelessly chosen index strategy where we "index everything".
- Implementation of every single index recommended by the Database Engine Tuning Advisor
- Favoring query speed for many combinations of queries on a primarily read-only workload, such as a data warehouse.
If you provide the table definition in your question along with all existing indexes, in T-SQL
CREATE TABLE statements, we may be able to suggest improvements.