【发布时间】:2013-01-03 16:53:33
【问题描述】:
我想知道,当将条目添加到 MySQL 表时,哪些索引需要更长时间才能更新。那些具有高基数或具有低基数的索引。
这是一般规则吗?
【问题讨论】:
-
@Quassnoi 有previously answered 的一个类似问题的详细信息,并得出结论“您的问题的答案是:不,列基数不会影响索引写入性能 "。
标签: mysql optimization indexing cardinality
我想知道,当将条目添加到 MySQL 表时,哪些索引需要更长时间才能更新。那些具有高基数或具有低基数的索引。
这是一般规则吗?
【问题讨论】:
标签: mysql optimization indexing cardinality
这两种类型的表格通常具有相同的更改量。如果更改 N 行,则需要更新 N 个键。
但是,高基数具有许多唯一值(例如具有UNIQUE 约束的键),而低基数几乎没有唯一值。
很少有值比很多值占用更少的空间,因此更大比例(可能是全部)的索引将适合缓存/缓冲区。因此,更新和读取都将从 RAM 提供,而不是访问磁盘,这意味着它会更快。
另一方面,如果基数较低,则索引实际上并没有那么有用。毕竟,您希望索引能够快速 查找行。理想情况下,对树或哈希结构的 1-5 次探测恰好返回一行(在几百万/十亿行中)。或者,对应于某个范围的行子集。
如果您用来查找行的索引每次都返回一组 10,000 行,这通常不是很有用(当然也有例外)。
【讨论】: