MySQL索引

内容纲要

索引

索引的重要性不言而喻,索引面相读多写少的场景,典型的空间换时间的应用。

如果你是写多多少的场景,或许考虑缓存策略而不是新建索引,比如:组合缓存策略:Cache-Aside + Read-Through + (Write-Through/Write-Behind)。

索引的特性

索引的特性 索引是一个单独的数据结构,它维护了数据的一部分副本。当你创建一个索引时,它会生成一个与主数据结构(表)不同的第二个数据结构。重要的是要理解每个索引都维护有数据一部分的副本,这意味着如果你有多个索引,就会有不同部分数据的多个副本。

  1. 一个单独的数据结构
  2. 部分表数据的副本
  3. 指向你的原始数据行

创建索引的规则

你应该尽可能根据需要创建索引,因为索引是提高查询性能的最佳工具,这通常转化为应用程序的性能提升。不过,也要尽可能地少创建索引,因为过多的索引会影响性能。

B+树

InnoDB存储引擎只支持B+数索引,你可以显示的创建B+树结构的索引,但是你不能显示的支持哈希索引,InnoDB会使用自适应哈希索引来进行优化查询。

聚集索引B+树:
file

非聚集索引B+树:
file

主键数据数据类型

主键数据类型最好是BIGINT,能添加无符号就使用无符号BIGINT(Unsigned BIGINT)。

关于主键建议都是自增的,这个自增并不是说要你使用MySQL的自增列,而是选择类似于雪花算法等自增的算法,这样能够有效的避免B+树的页分裂。

但是使用字符串类型作为主键,比如:UUID或GUID,可能会增加索引大小并可能需要B树重新平衡。

如果非要使用字符串作为主键,建议选择按时间排序的,以便把新记录添加到表的末尾。你可以自己按照ASCII码表的数字来设计一个自己的字符串主键字符串。

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部