MySQl中一般的Mysql和Indexes Unique Indexes
的性能特征是什么(如Primary Key Index
):
鉴于我将在我的数据库中插入或更新记录:如果表有10万条记录而不是1亿条记录,那么更新记录(=构建/更新索引)的速度是否会有所不同。或者换句话说,更改一行后的Index构建时间是否取决于总索引大小?
这是否也适用于Mysql中的任何其他索引,如主键索引?
非常感谢你 汤姆
答案 0 :(得分:3)
MySQL中的大多数索引在内部都是相同的 - 它们是B树数据结构。因此,更新B树索引是O(log n)操作。因此,随着索引中条目数量的增加,它会花费更多,但并不是很糟糕。
通常,您从索引中获得的好处远远超过更新它的成本。
答案 1 :(得分:1)
索引的典型MySQL实现是一组排序值(不确定任何存储引擎是否使用不同的策略,但我相信这适用于流行的策略) - 因此,更新索引不可避免地需要更长的时间增长。但是,减速不一定非常糟糕 - 在N个键的排序索引中定位键是O(log N)
,并且可以(尽管不是微不足道)进行更新O(1)
(在在发现之后,至少在摊销意义上。因此,如果您像示例中那样平方记录数,并选择具有高度优化实现的存储引擎,那么您可以合理地希望索引更新在大表上只需要像在小表上那样长两倍
答案 2 :(得分:0)
请注意,如果新的主键值总是大于前一个(即自动增量整数字段),则不需要重建索引。