Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
wushizhenking
JavaGuide
提交
d9b99be6
J
JavaGuide
项目概览
wushizhenking
/
JavaGuide
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
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,发现更多精彩内容 >>
提交
d9b99be6
编写于
6月 06, 2018
作者:
S
Snailclimb
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新Mysql内容
增加了字符集及校对规则和索引相关的内容
上级
04e49648
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
13 deletion
+27
-13
数据存储/Mysql.md
数据存储/Mysql.md
+27
-13
未找到文件。
数据存储/Mysql.md
浏览文件 @
d9b99be6
...
...
@@ -10,29 +10,43 @@
> ### 视频教程推荐
[
与MySQL的零距离接触-慕课网
](
https://www.imooc.com/learn/122
)
[
MySQL开发技巧(一)
](
https://www.imooc.com/learn/398
)
**基础入门:**
[
与MySQL的零距离接触-慕课网
](
https://www.imooc.com/learn/122
)
[
MySQL开发技巧(二)
](
https://www.imooc.com/learn/427
)
**Mysql开发技巧:**
[
MySQL开发技巧(一)
](
https://www.imooc.com/learn/398
)
[
MySQL开发技巧(二)
](
https://www.imooc.com/learn/427
)
[
MySQL开发技巧(三)
](
https://www.imooc.com/learn/449
)
[
MySQL开发技巧(三)
](
https://www.imooc.com/learn/449
)
**Mysql5.7新特性及相关优化技巧:**
[
MySQL5.7版本新特性
](
https://www.imooc.com/learn/533
)
[
性能优化之MySQL优化
](
https://www.imooc.com/learn/194
)
[
MySQL
开发技巧(一)
](
https://www.imooc.com/learn/398
)
[
MySQL
集群(PXC)入门
](
https://www.imooc.com/learn/993
)
[
MyCAT入门及应用
](
https://www.imooc.com/learn/951
)
[
MySQL5.7版本新特性
](
https://www.imooc.com/learn/533
)
[
性能优化之MySQL优化
](
https://www.imooc.com/learn/194
)
[
MySQL集群(PXC)入门
](
https://www.imooc.com/learn/993
)
[
MyCAT入门及应用
](
https://www.imooc.com/learn/951
)
> ### 常见问题总结
-
**存储引擎**
[
MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
](
https://juejin.im/post/5b1685bef265da6e5c3c1c34
)
[
MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
](
https://juejin.im/post/5b1685bef265da6e5c3c1c34
)
-
**字符集及校对规则**
字符集指的是一种从二进制编码到某类字符符号的映射。校对规则则是指某种字符集下的排序规则。Mysql中每一种字符集都会对应一系列的校对规则。
Mysql采用的是类似继承的方式指定字符集的默认值,每个数据库以及每张数据表都有自己的默认值,他们逐层继承。比如:某个库中所有表的默认字符集将是该数据库所指定的字符集(这些表在没有指定字符集的情况下,才会采用默认字符集) PS:整理自《Java工程师修炼之道》
详细内容可以参考:
[
MySQL字符集及校对规则的理解
](
https://www.cnblogs.com/geaozhang/p/6724393.html#mysqlyuzifuji
)
-
**索引相关的内容(数据库使用中非常关键的技术,合理正确的使用索引可以大大提高数据库的查询性能)**
Mysql索引使用的数据结构主要有BTree索引和哈希索引。对于哈希索引来说,底层的数据结构就是哈希表,因此在绝大多数需求为单条记录查询的时候,可以选择哈希索引,查询性能最快;其余大部分场景,建议选择BTree索引。
Mysql的BTree索引使用的是B数中的B+Tree,但对于主要的两种存储引擎的实现方式是不同的。
**MyISAM:**
B+Tree叶节点的data域存放的是数据记录的地址。在索引检索的时候,首先按照B+Tree搜索算法搜索索引,如果指定的Key存在,则取出其data域的值,然后以data域的值为地址读取相应的数据记录。这被称为“非聚簇索引”。
**InnoDB:**
其数据文件本身就是索引文件。相比MyISAM,索引文件和数据文件是分离的,其表数据文件本身就是按B+Tree组织的一个索引结构,树的叶节点data域保存了完整的数据记录。这个索引的key是数据表的主键,因此InnoDB表数据文件本身就是主索引。这被称为“聚簇索引(或聚集索引)”。而其余的索引都作为辅助索引,辅助索引的data域存储相应记录主键的值而不是地址,这也是和MyISAM不同的地方。
**在根据主索引搜索时,直接找到key所在的节点即可取出数据;在根据辅助索引查找时,则需要先取出主键的值,在走一遍主索引。**
**因此,在设计表的时候,不建议使用过长的字段作为主键,也不建议使用非单调的字段作为主键,这样会造成主索引频繁分裂。**
详细内容可以参考:
[
干货:mysql索引的数据结构
](
https://www.jianshu.com/p/1775b4ff123a
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录