Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
jackxsu
JavaGuide
提交
b26f3777
J
JavaGuide
项目概览
jackxsu
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
J
JavaGuide
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
b26f3777
编写于
6月 18, 2021
作者:
T
TommyMerlin
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix typo
上级
f443809d
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
5 addition
and
7 deletion
+5
-7
docs/database/MySQL Index.md
docs/database/MySQL Index.md
+5
-7
未找到文件。
docs/database/MySQL Index.md
浏览文件 @
b26f3777
...
...
@@ -28,11 +28,9 @@ select username , age from user where username = 'Java' and age = 22
## 选择索引和编写利用这些索引的查询的3个原则
1.
单行访问是很慢的。特别是在机械硬盘存储中
(
SSD的随机I/O要快很多,不过这一点仍然成立)。如果服务器从存储中读取一个数据块只是为了获取其中一行,那么就浪费了很多工作。最好读取的块中能包含尽可能多所需要的行。使用索引可以创建位置引,用以提升效率。
1.
单行访问是很慢的。特别是在机械硬盘存储中
(
SSD的随机I/O要快很多,不过这一点仍然成立)。如果服务器从存储中读取一个数据块只是为了获取其中一行,那么就浪费了很多工作。最好读取的块中能包含尽可能多所需要的行。使用索引可以创建位置引,用以提升效率。
2.
按顺序访问范围数据是很快的,这有两个原因。第一,顺序 I/O 不需要多次磁盘寻道,所以比随机I/O要快很多(特别是对机械硬盘)。第二,如果服务器能够按需要顺序读取数据,那么就不再需要额外的排序操作,并且GROUPBY查询也无须再做排序和将行按组进行聚合计算了。
3.
索引覆盖查询是很快的。如果一个索引包含了查询需要的所有列,那么存储引擎就
不需要再回表查找行。这避免了大量的单行访问,而上面的第1点已经写明单行访
问是很慢的。
3.
索引覆盖查询是很快的。如果一个索引包含了查询需要的所有列,那么存储引擎就不需要再回表查找行。这避免了大量的单行访问,而上面的第1点已经写明单行访问是很慢的。
## 为什么索引能提高查询速度
...
...
@@ -58,7 +56,7 @@ MySQL的基本存储结构是页(记录都存在页里边):
1.
**定位到记录所在的页:需要遍历双向链表,找到所在的页**
2.
**从所在的页内中查找相应的记录:由于不是根据主键查询,只能遍历所在页的单链表了**
很明显,在数据量很大的情况下这样查找会很慢!这样的时间复杂度为O
(n)
。
很明显,在数据量很大的情况下这样查找会很慢!这样的时间复杂度为O
(n)
。
### 使用索引之后
...
...
@@ -95,7 +93,7 @@ select * from user where city=xx ; // 无法命中索引
### 注意避免冗余索引
冗余索引指的是索引的功能相同,能够命中索引(a, b)就肯定能命中索引(a) ,那么索引(a)就是冗余索引。如(name,city
)和(name )这两个索引就是冗余索引,能够命中前者的查询肯定是能够命中后者的
在大多数情况下,都应该尽量扩展已有的索引而不是创建新索引。
冗余索引指的是索引的功能相同,能够命中索引(a, b)就肯定能命中索引(a) ,那么索引(a)就是冗余索引。如(name,city
)和(name)这两个索引就是冗余索引,能够命中前者的查询肯定是能够命中后者。
在大多数情况下,都应该尽量扩展已有的索引而不是创建新索引。
MySQL 5.7 版本后,可以通过查询 sys 库的
`schema_redundant_indexes`
表来查看冗余索引
MySQL 5.7 版本后,可以通过查询 sys 库的
`schema_redundant_indexes`
表来查看冗余索引
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录