InnoDB(4,用Elasticsearch搞定日均1亿订单查询

本文详细解释了InnoDB存储引擎如何选择主键,特别关注非空唯一索引和rowid的角色。还介绍了InnoDB的逻辑存储结构,包括表空间、段、区和页。最后提及提供Java开发者的学习资源,帮助提升技能。
摘要由CSDN通过智能技术生成
  • 首先判断表中是否有非空的唯一索引,即unique key not null,如果有,那么该列就会变为主键(rowid)

  • 如果有多个非空的唯一索引,则会选择建表时第一个定义的非空唯一索引作为主键(rowid)

  • 如果不符合上述条件,InnoDB存储引擎将自动创建一个6字节大小的指针(rowid)

举个栗子

CREATE TABLE z(

a INT NOT NULL,

b INT NULL,

c INT NOT NULL,

d INT NOT NULL,

UNIQUE KEY(b),

UNIQUE KEY©,

UNIQUE KEY(d)

)ENGINE=INNODB,CHARSET=utf8;

从建表上看,可以看到b、c、d列都有唯一索引,但b可以为NUll,故不可以充当主键,而第一个非空唯一索引是c列,所以c将会充当主键。

//插入几条数据

INSERT INTO z SELECT 1,2,3,4;

INSERT INTO z SELECT 1,3,4,5;

INSERT INTO z SELECT 1,4,5,6;

INSERT INTO z SELECT 1,5,6,7;

//查询情况,_rowid可以判断主键是哪一列

SELECT a,b,c,d,_rowid FROM z;

结果如下所示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值