MySQL是否会更新所有插入的索引?我可以在每次插入x后更新它吗?

Leo*_*ang 8 mysql sql indexing

我有一些有关MySQL索引的相关问题:

  1. 每次插入东西时,MySQL都会更新索引吗?
  2. 当MySQL由于插入而更新索引时,它会重建整个索引吗?
  3. 有没有办法让MySQL在每个x插入之后更新索引?

我的应用程序中有很多插入,我担心MySQL会在每次插入后重建索引。数据不必是实时的,因此我可以在插入特定数量的数据后(如有可能)更新索引。

Bil*_*win 7

MySQL可能已经尽其所能了。

对于InnoDB(应该是MySQL的默认存储引擎),它会立即插入,更新和删除更改主键或唯一键索引。但是他们从不重建整个索引,而是将新值添加到这些索引中(或从中取出值)。

对于非唯一索引,InnoDB执行更改缓冲。也就是说,它会将更改排入队列,稍后将在后台将其合并到索引中。它甚至可以合并更改,以便更有效地完成对索引的物理更新。

您无需执行任何操作即可启用此功能,因为默认情况下已启用该功能。MySQL 5.1确实仅更改的缓冲INSERT。MySQL 5.5和更高版本另外会更改UPDATE和的缓冲DELETE

您可以根据需要禁用此功能(例如,如果使用SSD,那么避免随机I / O并不是很重要,并且可能要确保排队的更改不会累积)。通常,应保持启用该功能。