加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

高性能的MySQL(5)索引策略一聚簇索引

发布时间:2016-01-13 19:26:15 所属栏目:MySql教程 来源:网络整理
导读:聚簇索引,并不是一种单独的索引类型,而是一种数据存储方式。InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行信息。 因为无法把数据行存放在两
聚簇索引,并不是一种单独的索引类型,而是一种数据存储方式。InnoDB的聚簇索引实际上在同一个结构中保存了B-Tree索引和数据行信息。

因为无法把数据行存放在两个不同的地方,所以一个表只能有一个聚簇索引(不过可以通过覆盖索引来模拟,稍后再介绍)。

这里主要讨论InnoDB引擎,InnoDB通过主键聚集数据,如果没有主键会选择一个非空的唯一索引,如果还没有,InnoDB会隐式定义一个主键来作为聚簇索引。

聚簇索引是一把双刃剑,要仔细考虑。

优点:

1、可以把相关数据保存在一起,例如实现电子邮件时,根据用户ID来聚集数据,这样只需要从磁盘都去少量数据页就可以获取某个用户的全部邮件,如果没有聚簇索引,则每封邮件都可能导致一次I/O

2、数据访问更快。因为索引和数据都在一个B-Tree中。

3、使用聚簇索引的查询,可以直接使用页节点中的主键值。

缺点:

1、聚簇索引最大限度的提高了I/O密集型应用的性能,如果数据都放在内存中了,优势就没了。

2、插入速度严重依赖于插入顺序,按照主键的顺序插入到数据表中速度是最快的。如果不是,插入完数据之后最好使用OPTIMIZE TABLE命令组织一下。

3、更新聚簇索引列的代价很高,因为需要移动新的数据。

4、在插入新行,或者主键更新需要移动行的时候,可能导致页分裂,从而导致占用更多的磁盘空间。

5、二级索引(非聚簇)可能比想象的要大,因为二级索引的叶子节点中包含了引用行的主键列。

6、二级索引访问需要2次索引查找,而不是一次,因为二级索引保存的不是行的物理位置,而是主键值。

InnoDB和MyISAM数据分布对比。

CREATE TABLE `layout_test` (
  `col1` int(11) NOT NULL,
  `col2` int(11) NOT NULL,
  PRIMARY KEY (`col1`),
  KEY `col2` (`col2`)
);

主键不是递增的,随机顺序插入,col2随即复制,重复的很多。

MyISAM比较简单,他按照数据插入的顺序存储在磁盘上。

高性能的MySQL(5)索引策略一聚簇索引

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读