MySQL概述
基础篇
通用语法及分类
DCL
DQL
DML
DDL
函数
字符串函数
数值函数
日期函数
流程函数
约束
常用约束
外键约束
多表查询
多表关系
查询
内连接查询
外连接查询
自连接查询
联合查询
子查询
事务
进阶篇
存储引擎
性能分析
查看执行频次
慢查询日志
profile
explain
索引
索引结构
索引分类
语法
使用规则
设计原则
SQL 优化
插入数据
主键优化
order by优化
group by优化
limit优化
count优化
update优化(避免行锁升级为表锁)
视图
存储过程
触发器
锁
InnoDB 引擎
事务原理
MVCC
数据类型
权限一览表
图形化界面工具
索引分类 - MySql学习文档 - 笔下光年
网站首页
索引分类
| 分类 | 含义 | 特点 | 关键字 | | ------------ | ------------ | ------------ | ------------ | | 主键索引 | 针对于表中主键创建的索引 | 默认自动创建,只能有一个 | PRIMARY | | 唯一索引 | 避免同一个表中某数据列中的值重复 | 可以有多个 | UNIQUE | | 常规索引 | 快速定位特定数据 | 可以有多个 | | | 全文索引 | 全文索引查找的是文本中的关键词,而不是比较索引中的值 | 可以有多个 | FULLTEXT | 在 InnoDB 存储引擎中,根据索引的存储形式,又可以分为以下两种: | 分类 | 含义 | 特点 | | ------------ | ------------ | ------------ | | 聚集索引(Clustered Index) | 将数据存储与索引放一块,索引结构的叶子节点保存了行数据 | 必须有,而且只有一个 | | 二级索引(Secondary Index) | 将数据与索引分开存储,索引结构的叶子节点关联的是对应的主键 | 可以存在多个 | 聚集索引选取规则: - 如果存在主键,主键索引就是聚集索引 - 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引 - 如果表没有主键或没有合适的唯一索引,则 InnoDB 会自动生成一个 rowid 作为隐藏的聚集索引 #### 思考题 1\. 以下 SQL 语句,哪个执行效率高?为什么? ```mysql select * from user where id = 10; select * from user where name = 'Arm'; -- 备注:id为主键,name字段创建的有索引 ``` 答:第一条语句,因为第二条需要回表查询,相当于两个步骤。 2\. InnoDB 主键索引的 B+Tree 高度为多少? 答:假设一行数据大小为1k,一页中可以存储16行这样的数据。InnoDB 的指针占用6个字节的空间,主键假设为bigint,占用字节数为8. 可得公式:`n * 8 + (n + 1) * 6 = 16 * 1024`,其中 8 表示 bigint 占用的字节数,n 表示当前节点存储的key的数量,(n + 1) 表示指针数量(比key多一个)。算出n约为1170。 如果树的高度为2,那么他能存储的数据量大概为:`1171 * 16 = 18736`; 如果树的高度为3,那么他能存储的数据量大概为:`1171 * 1171 * 16 = 21939856`。 另外,如果有成千上万的数据,那么就要考虑分表,涉及运维篇知识。
上一篇:
索引结构
下一篇:
语法