Stpete111
Stpete111

Reputation: 3447

What are the disadvantages to Indexes in database tables?

Is there any reason I shouldn't create an index for every one of my database tables, as a means of increasing performance? It would seem there must be some reason(s) else all tables would automatically have one by default.

I use MS SQL Server 2016.

Upvotes: 42

Views: 46012

Answers (3)

Tim Newton
Tim Newton

Reputation: 925

As a minimum I would normally recommend having at least 1 index per table, this would be automatically created on your tables primary key, for example an IDENTITY column. Then foreign keys would normally benefit from an index, these would need to be created manually. Other columns that are frequently included in WHERE clauses should be indexed, especially if they contain lots of unique values. The benefit of indexing columns, such as gender (low-cardinality) when this only has 2 values is debatable. Most of the tables in my databases have between 1 and 4 indexes, depending on the data in the table and how this data is retrieved.

Upvotes: 3

Martin Thoma
Martin Thoma

Reputation: 136725

Advantage of having an index

  • Read speed: Faster SELECT when that column is in WHERE clause

Disadvantages of having an index

  • Space: Additional disk/memory space needed
  • Write speed: Slower INSERT / UPDATE / DELETE

Upvotes: 22

Gordon Linoff
Gordon Linoff

Reputation: 1271003

One index on a table is not a big deal. You automatically have an index on columns (or combinations of columns) that are primary keys or declared as unique.

There is some overhead to an index. The index itself occupies space on disk and memory (when used). So, if space or memory are issues then too many indexes could be a problem. When data is inserted/updated/deleted, then the index needs to be maintained as well as the original data. This slows down updates and locks the tables (or parts of the tables), which can affect query processing.

A small number of indexes on each table are reasonable. These should be designed with the typical query load in mind. If you index every column in every table, then data modifications would slow down. If your data is static, then this is not an issue. However, eating up all the memory with indexes could be an issue.

Upvotes: 59

Related Questions