6

让我们考虑一下我有一个包含 60 列的表,我需要对该表执行各种查询,并且还需要将该表与其他表连接起来。而且我几乎使用所有行来搜索该表中的数据,包括其他表。该表就像数据库中的主表(如主键)。所以所有的表都与这张表有关。通过考虑上述情况,我可以在表的每一列(60 列)上创建索引,这是一种好习惯吗?

单句:

Is it best practice to create index on each column in a table ?
What might happens if I create index on each column in a table?

其中 index 可能是“主键”、“唯一键”或“索引”

请评论,如果这个问题对你们来说不清楚,我会尝试改进这个问题。

4

4 回答 4

9

MySQL 的文档对此非常清楚(总而言之,在您将在 、 和聚合函数中使用的列上使用索引WHEREJOIN

因此,在表中的所有列上创建索引本质上没有错,即使它是 60 列。索引越多,插入速度越慢,一些更新将是因为 MySQL 必须创建键,但如果您不创建索引,如果在比较和连接中仅使用非索引列,MySQL 必须扫描整个表。

我不得不说我很惊讶你会

  1. 有一个 60 列的表
  2. 在or子句中使用所有JOIN这些列,WHERE而不依赖于同一表中的任何其他列

...但这是一个单独的问题。

于 2013-04-18T05:53:08.733 回答
3

在表中的每一列上创建索引不是最佳做法。

当列用于 where 子句时,索引最常用于提高查询性能。

假设您经常使用此查询:

select * from tablewith60cols where col10 = 'xx';

那么在 col10 上有一个索引会很有用。

请注意,默认情况下,主键上有一个索引,因此当您将表与其他表连接时,您应该使用主键来连接。

于 2013-04-18T06:01:01.500 回答
2

添加索引意味着数据库必须维护它,这意味着它必须更新,因此您拥有的写入越多,索引将更新的越多。

开箱即用创建索引不是一个好主意,仅在需要时创建索引(或者当您可以看到将来需要时......只有在非常明显的情况下)

于 2013-04-18T05:58:18.653 回答
1

在 SQL 中创建更多索引只会提高搜索速度,而插入和更新速度会变慢,并且会占用更多存储空间。

于 2018-10-12T16:18:54.033 回答