插入新行后,MySQL索引是否仍然有效?

时间:2009-12-29 22:54:30

标签: sql mysql

我有一个MySQL表,其索引涵盖两个字段。如果我在表中插入新行,我的索引是否仍然有效?

5 个答案:

答案 0 :(得分:8)

是的,索引会自动更新;因此,索引(也称索引)使插入,更新和删除更慢。

答案 1 :(得分:5)

是的,它仍然有效。如果在插入新数据后无法使用它们,则索引将毫无用处。请注意,添加到表中的数据越多,索引的增长就越大,因此您需要确保正确创建它们并将其限制为所需的数据。

答案 2 :(得分:5)

  

我有一个MySQL表,其索引涵盖两个字段。如果在表中插入新行,我的索引是否仍然有效?

是的,每次为该表执行插入/更新/删除时,索引都会更新。

答案 3 :(得分:3)

是。你能解释一下你认为它可能没有的更多原因吗?

请注意,如果您在一个或两个字段上也有单独的索引,则mysql(我使用的至少一些5.0版本)默认情况下不一定会使用组合索引;如有疑问,请使用EXPLAIN验证您的索引是否按预期使用。

答案 4 :(得分:3)

正如其他人所说,每个插入都会更新索引。这是插入和更新的性能损失的一部分。

实际上,这并不像一些回答者提到的那样奇怪。在20世纪80年代,我使用RDBMS设计了一个系统,该系统推迟了“性能”更新(根据文档)。具有讽刺意味的是,它最初被命名为RDM,最初用于实时数据管理器(或者非常接近的那些),但后来用于响应式数据管理器

RDM似乎是为了人类的速度更新,因此延迟数据库写入直到几行完成可能是可以接受的。我设计的系统使用由连接到自动数据源的数据库服务器包装的数据库后端。 AFAIK,这是RDM首次应用快速行插入的应用。其中一个问题解决方案是设计一个时间戳字段,这样系统中的所有节点都可以说“用yyyy-mm-dd hh:mm:ss”更改了所有已更改的内容。事实证明这是一个最坏情况的索引更新/刷新场景,并且很难诊断。一旦未记录的调用意味着信任我,我真的希望刷新数据并立即更新索引,它工作得非常好。