Mysql中的Unique Indexes
和MySQl (如Primary Key Index
)中的一般索引的性能特征是什么:
假设我将在数据库中插入或更新一条记录:如果表有10000条记录,与1亿条记录相比,更新记录的速度(=建立/更新索引)是否会有所不同。或者换句话说,更改一行后的索引建立时间取决于总索引大小吗?
这是否也适用于Mysql中的其他索引,如主键索引?
非常感谢你,汤姆
发布于 2010-06-05 10:25:04
MySQL中的大多数索引在内部实际上是相同的--它们都是B树数据结构。因此,更新B树索引是一种O(log n)操作。因此,随着索引中条目数量的增加,它的成本也会增加,但并不是很严重。
一般来说,从索引中获得的好处远远超过更新它的成本。
发布于 2010-06-05 10:27:18
索引的典型MySQL实现是一组排序的值(不确定是否有存储引擎使用不同的策略,但我相信这适用于流行的存储引擎) --因此,随着索引的增长,更新索引不可避免地需要更长的时间。然而,速度减慢并不是那么糟糕--在由N个键组成的排序索引中定位一个键是O(log N)
,并且可以(尽管不是很简单)在发现之后进行更新O(1)
(至少在分期意义上是如此)。因此,如果您像示例中那样计算记录数量的平方,并选择一个具有高度优化实现的存储引擎,那么您可以合理地希望索引更新在大表上花费的时间是在小表上的两倍。
发布于 2010-06-05 10:38:22
请注意,如果新的主键值总是大于以前的值(即自动增量整型字段),则不需要重新构建索引。
https://stackoverflow.com/questions/2978871
复制相似问题