MySQL中有关索引组织表的概念分析

目前的流行的MySQL存储引擎中,InnoDB是最首先的引擎选型,我们在部署和规划的过程中,应该首选为InnoDB作为存储引擎的首先。在InnoDB存储引擎中,因为表都是按照主键的顺序进行存放的,这种存放方式,我们成为索引组织表(IOT)

在官方文档中,是这么阐述

clustered index
The InnoDB term for a primary key index. InnoDB table storage is organized based on the values of the primary key columns, 
to speed up queries and sorts involving the primary key columns. For best performance, choose the primary key columns carefully 
based on the most performance-critical queries. Because modifying the columns of the clustered index is an expensive operation, 
choose primary columns that are rarely or never updated.


In the Oracle Database product, this type of table is known as an index-organized table.

详情请查看对应的URL地址

https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_clustered_index

那么,在整个创建表的过程中,InnoDB是怎么去创建主键的

1.显式的创建主键Praimary key
2.判断表中是否有非空唯一索引,如果有,则为主键
3.如果都不符合上述1/2的条件,则会生成UUID的一个隐式主键(6字节大)

在创建的的过程中,如果表中,有多个非空唯一索引的时候,则按照创建索引的顺序,以第一个非空唯一索引为准来创建

CREATE TABLE test(
a INT NOT NULL,
b INT NULL,
c INT NOT NULL,
d INT NOT NULL,
UNIQUE KEY (b),
UNIQUE KEY(d),
UNIQUE KEY(c)
);


INSERT INTO test SELECT 1,2,3,4;
INSERT INTO test SELECT 5,6,7,8;
INSERT INTO test SELECT 9,10,11,12;


SELECT a,b,c,d,_rowid FROM test;
+---+------+----+----+--------+
| a | b    | c  | d  | _rowid |
+---+------+----+----+--------+
| 1 |    2 |  3 |  4 |      4 |
| 5 |    6 |  7 |  8 |      8 |
| 9 |   10 | 11 | 12 |     12 |
+---+------+----+----+--------+
3 rows in set (0.00 sec)

rowid可以显示的指出,以哪个字段为主键做依附,从上述的显示来看,是以d作为主键来进行IOT构建.为什么不是以b来构建呢,作为主键的选择,必须是非空的,故此b是符合,而c在d的后面,而d是符合非空唯一的,故此以d作为主键进行。但是需要注意的是,rowid只会显示在有主键和有非空唯一索引的情况下才会显示,否则,会提示不存咋的列,同时rowid也不适合用在联合主键中,需要特别注意这两点








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值