MySQL的聚簇索引和非聚簇索引的区别以及示例
2023-12-25 16:17:24
MySQL的聚簇索引和非聚簇索引
聚簇索引
聚簇索引是一种索引结构,它与数据行存储在一起,即索引的叶子节点就是数据行本身。在MySQL中,主键索引就是一种典型的聚簇索引
。
涉及情况
当查询需要按照主键或唯一索引进行精确查找时,会涉及到聚簇索引。
数据结构
聚簇索引的数据结构是B+树,它的叶子节点存储了完整的数据行
。
速度
由于数据行和索引在一起,所以在使用聚簇索引进行查询时,速度比非聚簇索引更快。
非聚簇索引
非聚簇索引是一种索引结构,它的叶子节点存储的是指向数据行的指针,而不是数据行本身。在MySQL中,普通索引就是一种非聚簇索引
。
涉及情况
当查询需要按照非主键或非唯一索引进行查找时,会涉及到非聚簇索引。
数据结构
非聚簇索引的数据结构同样是B+树,但它的叶子节点存储的是指向数据行的指针
。
速度
由于非聚簇索引的叶子节点存储的是指针而不是完整的数据行
,所以在使用非聚簇索引进行查询时,速度相对较慢。
对比
- 聚簇索引的叶子节点存储完整的数据行,
速度更快
,适合于按主键或唯一索引进行精确查找的情况,不需要回表
。 - 非聚簇索引的叶子节点存储的是指向数据行的指针,
速度相对较慢
,适合于按非主键或非唯一索引进行查找的情况,需要回表
。
例子
假设有一个名为students
的学生表,包含以下字段:
- id (主键)
- name
- age
- gender
- class_id (班级ID)
CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
gender VARCHAR(10),
class_id INT,
INDEX idx_name (name),
INDEX idx_class_id (class_id)
);
在这个例子中,id
字段是主键,因此它将会作为聚簇索引。同时,我们创建了两个非聚簇索引,分别是按照name
和class_id
字段创建的索引。当进行按照name
或class_id
进行查询时,将会涉及到非聚簇索引的使用。
文章来源:https://blog.csdn.net/weixin_44808225/article/details/135199118
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!