2010-06-05 28 views
1

什么是MySQL的MySQL的数据和索引一般Unique Indexes性能特性(如Primary Key Index):Mysql:Unique Index =大数据集的性能特征?

鉴于我将插入或更新我的DATABSE纪录:请问更新记录(=建筑的速度/更新索引)会有所不同,如果该表有10千条记录而不是1亿条记录。或者换句话说,改变一行后的索引构建时间是否取决于总索引大小?

这是否也适用于在MySQL任何其他指标,如主键索引?

非常感谢您 汤姆

回答

3

在MySQL中的大多数指标实际上是一样的内部 - 他们的B-tree数据结构。如此,更新B树索引是O(log n)操作。所以,随着索引中条目的数量增加,成本会更高,但并不是很糟糕。

一般情况下,从索引获得远远超过更新它的成本效益。

+0

的确如此,和@汤姆:牢记:使用InnoDB表时,有一个主索引无论您有一个在你的表定义或没有,还不如成为一个都看得到的主键。 – Wrikken 2010-06-05 02:34:58

+0

对于InnoDB,如果您没有定义主键,那么在创建自己的聚簇索引之前,MySQL实际上会使用您的第一个NOT NULL唯一索引作为主键(和聚簇索引)。 http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html – 2010-06-05 02:56:57

1

典型的MySQL实现的指标是一组分类值(不知道任何存储引擎使用不同的策略,但我相信这对于这款流行的) - 因此,更新索引不可避免地需要更长的时间为它增长。然而,减速不一定非常糟糕 - 在一个有N个键的排序索引中定位一个键是O(log N),并且可能(尽管不是微不足道的)在步骤之后进行更新O(1)(至少在摊销意义上)发现。因此,如果您按照您的示例对记录数进行平方,并且选择具有高度优化实现的存储引擎,则可以合理地希望索引更新在大表上的大小与在小表上的大小相比只有两倍。

0

注意,如果新的主键值总是比前面的(即自动增量整数字段)越大,你的索引不会需要重建。