让我们考虑一下有一个包含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?
索引可能是“主键”,“唯一键”或“索引”
请评论,如果这个问题对你不清楚,我会尝试改进这个问题。
答案 0 :(得分:6)
MySQL's documentation非常明确(总结使用您将在WHERE
,JOIN
和聚合函数中使用的列的索引。)
因此,在表中的所有列上创建索引没有任何内在错误,即使它是60列。更多的索引有更慢的插入和一些更新将是因为MySQL必须创建密钥,但如果你不创建索引MySQL必须扫描整个表,如果在比较和连接中只使用非索引列。
我不得不说,我很惊讶你会
JOIN
或WHERE
子句中使用所有列,而不依赖于同一表中的任何其他列......但这是一个单独的问题。
答案 1 :(得分:2)
添加索引意味着数据库必须维护,这意味着必须对其进行更新,因此您拥有的写入越多,索引的更新就越多。
开箱即用创建索引不是一个好主意,只在你需要时创建一个索引(或者你将来可以看到需要的时候......只有在非常明显的时候才能创建索引)
答案 2 :(得分:2)
在表中的每列上创建索引不是最佳做法。
当在where子句中使用列时,索引最常用于提高查询性能。
假设您经常使用此查询:
select * from tablewith60cols where col10 = 'xx';
那么在col10上有一个索引会很有用。
请注意,默认情况下主键有一个索引,因此当您将表与其他表连接时,应使用主键加入。
答案 3 :(得分:1)
在SQL中创建更多索引只会提高搜索速度,同时会导致插入和更新速度变慢,并且还会占用更多存储空间。