Mysql中Innodb引擎表的默认主键_rowid

今天面试被问到一个问题:Innodb引擎创建表的时候,没有创建主键,mysql会怎么样?用普通索引查询数据是全表扫描吗?于是就翻了一下mysql的资料。

mysql的技术文档里面有如下文字:

If you do not define a PRIMARY KEY for your table, MySQL picks the first UNIQUE index that has only NOT NULL columns as the primary key and InnoDB uses it as the clustered index. If there is no such index in the table, InnoDB internally generates a clustered index where the rows are ordered by the row ID that InnoDB assigns to the rows in such a table. The row ID is a 6-byte field that increases monotonically as new rows are inserted. Thus, the rows ordered by the row ID are physically in insertion order. 

Innodb表中在没有默认主键的情况下会生成一个6byte空间的自动增长主键,该主键是查询不到的(用select _rowid from table查询会报"Unknown column _rowid")。当表中有非空的整形唯一索引时,_rowid就是对应主键,用select _rowid from table查询处出来的是对应的主键值。

所以,Innodb引擎中没有创建主键时,普通索引查询数据不是全表扫描的,普通索引B+树的叶子节点存放的是这个默认的_rowid 自动增长主键。

 

                                                                                                2020年07月11日 晚 于北京记

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值