mysql创建聚集索引sql_MySQL之聚集索引
在MySQL里,聚集索引和非聚集索引分别是什么意思,有什么区别,课课家来讲一下他们的意思和区别。
在MySQL中,InnoDB引擎表是(聚集)索引组织表(clustered index organize table),而MyISAM引擎表则是堆组织表(heap organize table)。
也有人把聚集索引称为聚簇索引。
当然了,聚集索引的概念不是MySQL里特有的,其他数据库系统也同样有。
简言之,聚集索引是一种索引组织形式,索引的键值逻辑顺序决定了表数据行的物理存储顺序,而非聚集索引则就是普通索引了,仅仅只是对数据列创建相应的索引,不影响整个表的物理存储顺序。
我们先来看看两种存储形式的不同之处:
简单说,IOT表里数据物理存储顺序和主键索引的顺序一致,所以如果新增数据是离散的,会导致数据块趋于离散,而不是趋于顺序。而HOT表数据写入的顺序是按写入时间顺序存储的。
IOT表相比HOT表的优势是:
范围查询效率更高;
数据频繁更新(聚集索引本身不更新)时,更不容易产生碎片;
特别适合有一小部分热点数据频繁读写的场景;
通过主键访问数据时快速可达;
IOT表的不足则有:
数据变化如果是离散为主的话,那么效率会比HOT表差;
HOT表的不足有:
索引回表读开销很大;
大部分数据读取时随机的,无法保证被顺序读取,开销大;
每张InnoDB表只能创建一个聚集索引,聚集索引可以由一列或多列组成。
上面说过,InnoDB是聚集索引组织表,它的聚集索引选择规则是这样的:
首先选择显式定义的主键索引做为聚集索引;
如果没有,则选择第一个不允许NULL的唯一索引;
还是没有的话,就采用InnoDB引擎内置的ROWID作为聚集索引;
我们来看看InnoDB主键索引的示意图:
可以看到,在这个索引结构的叶子节点中,节点key值是主键的值,而节点的value则存储其余列数据,以及额外的ROWID、rollback pointer、trx id等信息。
课课家结合这个图,以及上面所述,可以知道:在InnoDB表中,其聚集索引相当于整张表,而整张表也是聚集索引。主键必然是聚集索引,而聚集索引则未必是主键。MyISAM是堆组织表,它没有聚集索引的概念。
mysql创建聚集索引sql_MySQL之聚集索引相关推荐
- mysql主键创建非聚集索引_什么是聚集索引,非聚集索引,索引覆盖,回表,索引下推...
聚集索引 我们先建如下的一张表 CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '学号',`name` var ...
- mysql创建非聚集索引_一文看懂聚集索引和非聚集索引的区别
一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonclu ...
- mysql创建非聚集索引_聚集索引和非聚集索引的区别
作者:riemann riemann.blog.csdn.net/article/details/90324846 一.深入浅出理解索引结构 实际上,可以把索引理解为一种特殊的目录.微软的SQL SE ...
- mysql创建非聚集索引_一文让你明白聚集索引和非聚集索引?
我们知道Mysql底层使用的B+树来存储索引的,而且数据都存在叶子节点上.对于innodb来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引. ps:MyISAM的行记录是单独存储的,不和索引 ...
- mysql 创建聚集索引_索引为什么会加快Mysql的查询速度?
为什么用了索引之后,查询就会变快? 相信很多程序员朋友对数据的索引并不陌生,最常见的索引是 B+ Tree 索引,索引可以加快数据库的检索速度,但是会降低新增.修改.删除操作的速度,一些错误的写法会导 ...
- sql优化之:数据库索引创建原则,or/in/union与索引优化,聚集索引/非聚集索引/联合索引/索引覆盖,MySQL冗余数据的三种方案,MySQL双主一致性架构优化(来源:架构师之路)
一.一些常见的SQL实践 (1)负向条件查询不能使用索引 select * from order where status!=0 and stauts!=1 not in/not exists都不是好 ...
- mysql聚集索引_MySQL中怎样创建聚集索引和非聚集索引,求创建这两种索引的SQL语句。谢谢...
ALTER TABLE t1 ADD INDEX(or CREATE INDEX) ALTER TABLE t1 ADD FULLTEXT INDEX ALTER TABLE t1 ADD COLUM ...
- 一句话说清聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM
聚集索引和非聚集索引以及MySQL的InnoDB和MyISAM经常遇到有人向我咨询这个问题,其实呢,网上帖子很多,也说的都对,但是呢,看客可不一定是真的理解了.所以今天在这里用最简短的语言让你明白这些 ...
- mysql非聚集索引区间查询_mysql的聚集索引和非聚集索引,回表查询,索引覆盖,最左前缀原则略解...
什么是聚集索引和非聚集索引 我们知道 Mysql 底层是用 B+ 树来存储索引的,且数据都存在叶子节点.对于 InnoDB 来说,它的主键索引和行记录是存储在一起的,因此叫做聚集索引(clustere ...
最新文章
- jenkins配置git
- 无需卷积,完全基于Transformer的首个视频理解架构TimeSformer出炉
- oracle 学习笔记之触发器
- 笔记“SQL与Access”
- Eclipse的ExtJs智能提示
- CTFshow 爆破 web27
- HTML知识点总结之img、scirpt、link标签
- 如何创建自定义进度栏
- 开始《数据机构与算法之美》之旅
- c++远征之模板篇——运算符重载
- 激光干涉仪使用方法_激光干涉仪选择几点建议「智能制造2025」
- 喜庆新年春节 祝贺语词 艺术字体PSD分层素材
- 羽枭android,【答疑】Unreal Engine 4 是怎样发布android的? - 视频教程线上学
- 机器学习——KNN及代码实现
- 温习SQL server
- 用户 'sa' 登录失败。 连接SQL2000出现的问题。
- Unity mesh换装
- 也说类别Category
- Datawhale-机器学习算法-Task3 EM算法
- 懂计算机word的博主,2010 word 如何新建目录