没有合适的资源?快使用搜索试试~ 我知道了~
MySQL索引原理及慢查询优化(2)1
需积分: 0 1 下载量 143 浏览量
2022-08-08
23:24:45
上传
评论
收藏 211KB DOCX 举报
温馨提示
试读
19页
回答是,如果没有主键,则按照下列规则来建聚簇索引没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引如果没有这样的索引,InnoDB会隐式定义一
资源详情
资源评论
资源推荐
回想四年前,我在学习 mysql 的索引这块的时候,老师在讲索引的时候,是像下面这
么说的
索引就像一本书的目录。而当用户通过索引查找数据时,就好比用户通
过目录查询某章节的某个知识点。这样就帮助用户有效地提高了查找速
度。所以,使用索引可以有效地提高数据库系统的整体性能。
嗯,这么说其实也对。但是呢,大家看完这种说法,其实可能还是觉得太抽象了!因此
呢,我还想再深入的细说一下,所以就有了此文!
需要说明的是,我说的内容只在 Mysql 的 Innodb 引擎中是成立的。在 Sql Server、
oracle、Mysql 的 Mysiam 引擎中的正确性,不一定成立!
OK,废话不多说,开始啰嗦!
正文
索引的科普
先引进聚簇索引和非聚簇索引的概念!
我们平时在使用的 Mysql 中,使用下述语句
CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tbl_name (index_col_name,...)
index_col_name:
col_name [(length)] [ASC | DESC]
创建的索引,如复合索引、前缀索引、唯一索引,都是属于非聚簇索引,在有的书籍中,
又将其称为辅助索引(secondary index)。在后文中,我们称其为非聚簇索引,其数据
结构为 B+树。
那么,这个聚簇索引,在 Mysql 中是没有语句来另外生成的。在 Innodb 中,Mysql
中的数据是按照主键的顺序来存放的。那么聚簇索引就是按照每张表的主键来构造一颗
B+树,叶子节点存放的就是整张表的行数据。由于表里的数据只能按照一颗 B+树排序,
因此一张表只能有一个聚簇索引。
在 Innodb 中,聚簇索引默认就是主键索引。
这个时候,机智的读者,应该要问我
如果我的表没建主键呢?
回答是,如果没有主键,则按照下列规则来建聚簇索引
� 没有主键时,会用一个唯一且不为空的索引列做为主键,成为此表的聚簇索引
� 如果没有这样的索引,InnoDB 会隐式定义一个主键来作为聚簇索引。
ps:大家还记得,自增主键和 uuid 作为主键的区别么?由于主键使用了聚簇索引,如果
主键是自增 id,,那么对应的数据一定也是相邻地存放在磁盘上的,写入性能比较高。
如果是 uuid 的形式,频繁的插入会使 innodb 频繁地移动磁盘块,写入性能就比较低
了。
索引原理介绍
先来一张带主键的表,如下所示,pId 是主键
pId
name
birthday
5
zhangsan
2016-10-02
8
lisi
2015-10-04
11
wangwu
2016-09-02
13
zhaoliu
2015-10-07
画出该表的结构图如下
如上图所示,分为上下两个部分,上半部分是由主键形成的 B+树,下半部分就是磁盘
上真实的数据!那么,当我们, 执行下面的语句
剩余18页未读,继续阅读
仙夜子
- 粉丝: 32
- 资源: 325
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0