MySQL索引为什么会是表的大小的12倍?

所以我们有一个在主键上有两个索引的表,在表上的另一个列上有另一个索引。 索引大小比表本身大12倍。 这种情况发生的原因是什么? 我们之前已经对表格进行了优化,并且有所帮助,但是它又在增长。

谢谢!

这个大小对于索引来说并不less见,特别是对于大型文本字段。 虽然这可能是一个糟糕的索引策略的指示,但文本索引要比数字更复杂,特别是如果启用子stringsearch不能锚定到文本字段的开头。

虽然一个大型索引本质上看起来可能很慢,但由于其高度结构化的特性,它可以(或应该)很快地导航,从而比对数据本身的详尽search更快地产生正确数据的指针。

假设他们将继续适合磁盘,索引的真正testing是令人满意的search,更新和添加时间,尤其是数据量的规模。 如果这些方面仍然充足,那么一个大的指数是可以容忍的。

可能负面影响指数规模的因素

  • 数据分布(即如果统一或有偏见)
  • 正在插入/删除/更新的数据顺序(即,如果它不是随机的)
  • 对于varchar,varchar的大小和字符集
  • 对于innodb,对主键使用不必要的大数据types会影响每个索引的贡献,因为它隐含地是它的一部分

正如你所指出的,重写索引(即优化表)可以/将平衡索引结构再次。