表结构的优化

表结构的优化

当库中删除了大量的数据后,您可能会发现数据文件尺寸并没有减小。这是因为删除操作后在数据文件中留下碎片所致。通俗的理解就是,删除数据时,mysql并不会回收被已删除数据的占据的存储空间以及索引位,而是空在那里,等待新的数据来弥补这个空缺。删除操作其实是假删除,空间并没有被释放。所以对于写比较频烦的表,要定期进行optimize,比如一个月一次。用optimizetable(表结构优化)重新压缩表格来回收空间和达到优化性能。

Read More

索引和主键

索引的优点

索引的本质就是数据结构,索引往往以索引文件的形式存储在磁盘上。

主键索引、唯一索引、一般索引、hash索引(memory存储引擎支持)、聚簇索引、空间索引、全文索引(MyISAM支持)。

Read More

为何使用B+树作为索引的数据结构

为何使用B+树作为索引的数据结构

1)二叉树与B/B+树具有相同的查找时间复杂度O(logn),所以时间复杂度不是选择B树的原因
2)二叉树未能很好的应用磁盘的预读功能(每次磁盘预读的数据都是无用的),会造成较多的磁盘I/O操作;B /B+树都很好的运用了磁盘的预读功能,磁盘页的大小与节点的大小一致(InnoDB为16kb),减少了磁盘的I/O操作。

Read More

MySQL Cluster

MySQL Cluster

Mysql本身是不支持分布式的,所以在分布式系统中使用就得考虑分库分表,主备机制。分库分表就相当于是“切片”的概念;主备机制就相当于是“副本”的概念。

Read More

分库分表带来的问题

分库分表带来的问题

1.事务一致性问题

分布式事务

当更新内容同时分布在不同库中,不可避免会带来跨库事务问题。跨分片事务也是分布式事务,没有简单的方案,一般可使用"XA协议"和"两阶段提交"处理。

Read More

数据库分库分表

数据库分库分表

关系型数据库本身相对容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。此时就要考虑对其进行切分了,切分的目的就在于减少数据库的负担,缩短查询时间。阿里巴巴《Java开发手册》提出单表行数超过 500 万行或者单表容量超过 2GB,就推荐进行分库分表。

Read More

InnoDB物理层七模块

InnoDB物理层七模块

InnoDB 的物理存储结构,指的是 MySQL 的数据是怎么存储在物理介质上的,由哪些磁盘文件组成。所谓逻辑存储结构,指的是这些数据是如何有结构地组织起来的。

Read More