mysql - 哪些 MySQL 索引需要更长时间才能更新?

标签 mysql optimization indexing cardinality

我想知道,当一个条目被添加到 MySQL 表时,哪些索引需要更长时间才能更新。那些具有高基数或低基数的索引。

这是一般规则吗?

最佳答案

两种类型的表通常具有相同的更改量。如果更改 N 行,则需要更新 N 个键。

但是,高基数具有许多唯一值(例如具有UNIQUE 约束的键),而低基数具有很少的唯一值。

很少有值比许多值占用更少的空间,因此更大比例(大概是全部)的索引将适合缓存/缓冲区。因此,更新和读取都将从 RAM 提供服务,而不是访问磁盘,这意味着速度会更快。

另一方面,如果基数很低,索引就没有多大用处。毕竟,您希望索引能够快速查找行。理想情况下,对树或哈希结构进行 1-5 次探测仅返回一行(大约百万/十亿行)。或者,行的子集,对应于某个范围。
如果您用于查找行的索引每次都返回一组 10,000 行,这通常不是很有用(当然也有异常(exception))。

关于mysql - 哪些 MySQL 索引需要更长时间才能更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14143402/

相关文章:

php - Mysql数据转PHP数组,然后显示?

php - 从原始 mysql 文件创建 sql 文件

MySQL 查询优化

css - 我需要你对 CSS 优化的意见

sql - 什么时候适合使用index_scan来获取已经排序的数据?

sql - 为什么 GIN 三元组索引不与 ILIKE ANY 子句一起使用?

php - mysql 在连接大表时有时会很慢

mysql - 如何加速这个 DELETE/LEFT JOIN mysql 查询?

mysql - 将多个 MySQL 数据库合并为一个保留参照完整性的数据库

c# - 为什么/optimize 在 C# 项目中生成比未启用此功能更多的代码分析警告?