什么是主键?(以及相关知识拓展)
- 唯一标识一行记录
- msql:innodb:mysql会根据主键创建主键索引
- 主键可以一个列,也可以联合主键
- 主键的选择要:不重复、唯一、没有空值,长度固定、自增
- MySQL中只要有主键会立刻根据主键创建主键索引表(B+树),叶子结点存储数据和索引,非叶子节点存储索引
- 自增主键插入比较快,不会涉及到叶子结点分裂问题。
为什么一定要有主键?
- 有主键查询速度会更快。如果没有主键,那么这些表就会依赖一个全局序列计数器生成的ROW_ID来构造一个隐式的聚簇索引,就会导致竞争引起性能问题。
- 没有主键,更新或删除表中特定行会很困难。
非主键索引结构(=非聚集索引=非聚簇索引)?
- 特点:叶子结点存储的是索引数据+主键数据(id)
什么是回表查询?
- select * from table where name=“lisi” ; name:非主键索引
会先根据 name索引表查询找到“lisi”,再根据主键索引表找到其他数据(回表)