对频繁更新的列建立索引对性能有何影响?

war*_*pio 5 mysql performance index query-performance

我只是想知道我这样做是否正确。我已经在谷歌上搜索了几个小时,但找不到直接的答案。

我有一个可能有大量插入和更新的表。每当对行进行更新时,“已修改”列都会发生更改。我的应用程序需要查询该表(以及一些联接和过滤),并获取按“已修改”列排序的分页结果。我读过的所有内容都告诉我,我需要为用于排序的列建立索引。但我也读过很多文章,告诉我对经常更新的列建立索引是一个坏主意,因为每次索引列的值发生变化时都需要重建索引。

那么这样做的正确方法是什么?如果我对“已修改”列建立索引,当索引变得非常大并且需要一遍又一遍地不断重建自身时,这是否会导致问题?如果我不对“已修改”列建立索引,我的分页查询最终是否会变得如此缓慢,以至于我的应用程序变得无法使用?或者还有其他我没有想到的解决方案?

-编辑-我倾向于在列上使用索引。但我仍然不确定对索引列进行大量更新会对使用该索引的 SELECT 查询产生什么影响。我知道索引会减慢 UPDATE 和 INSERT 的速度,但我不确定多次重建索引是否会增加 I/O 工作负载(每次更新一行时,在任何给定时刻可能会有数十次更新)一般来说,这将是服务器性能的主要瓶颈。或者它并不像我想象的那么大?

Eze*_*nay 0

INSERT 对受影响索引的影响低于 UPDATE,但 INSERT 会影响所有索引(不满足条件的条件索引除外)。

如果您需要经常快速地检索数据,则索引是必要的。您必须权衡其中一个(更新/插入中的索引)或另一个(完整扫描搜索)的影响:不能两者兼顾!一种折衷方案是数据仓库,它可以实现快速插入/更新、不频繁的完整扫描(复制到数据仓库)以及快速搜索非最新数据。