MySQL InnoDB表和索引之聚簇索引与第二索引

MySQL InnoDB表和索引之聚簇索引与第二索引

By:授客QQ:1033553122

 

每个InnoDB表都有一个称之为聚簇索引(clustered index)的特殊索引,存储记录行数据。通常,聚簇索引和主索引是近义的。

 

l   当在表上定义一个主键时, InnoDB把它当聚簇索引用。为每个表都定义一个主键,如果没有逻辑上唯一且NOT-NULL的列,则添加一个自动增长(auto-increment)的列

 

l   如果没为表定义主键,mysql定位所有索引列都为NOT NULL的第一个唯一索引,并把它当聚簇索引使用。

 

l   如果表没有主键或合适的唯一索引,InnoDB会在某个包含row ID值的合成列上生成一个隐藏的聚簇索引。记录行按表中InnoDB赋予行的row ID排序。row ID为一6字节域,当有新行被插入时会自动增加,所以,按row ID排序的行物理上为按插入顺序排序。

 

 

二级索引(secondary index)和聚簇索引的关系

除了聚簇索引外的索引,都叫二级索引。InnoDB中,每个二级索引条目都包含主键列InnoDB使用主键值来搜索聚簇索引中的记录。

eg:

CREATE TABLE tb_name (

  col1 INT NOT NULL,

  col2 INT NOT NULL,

  col3 INT

  PRIMARY KEY (col1, col2),

  INDEX index_name(col3)

) ENGINE = InnoDB;

 

如上,二级索引index_namecol3)的元组在InnoDB内部实际被扩展成(col3, col2, col3),即包含主键值.

 

参考连接:

http://dev.mysql.com/doc/refman/5.5/en/innodb-index-types.html

 

posted @   授客  阅读(998)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示