MyISAM InnoDB存储引擎

MyISAM InnoDB存储引擎

存储引擎结构

  • MyISAM InnoDB存储引擎是针对于表的存储引擎

    • MYISAN索引结构(索引文件和数据文件是分离的【非聚集性】):.frm文件->表结构,*.MYI文件->索引 、\.MYD文件->数据
    • 非叶子结点读入RAM,折半查找,找到key所在的叶子结点,然后叶子结点的value就是数据库要找的地址

    • InnoDB索引结构:.frm文件->表结构,\.idb文件->数据和索引文件

    • 聚集索引:叶子结点包含了完整的数据记录(查找效率高)

Q:

  1. B树和B+树的区别

    • 相同的层数,B+存储得多。因为B树非叶子结点会存储数据
    • B树叶子结点没有指针,范围查找不好
  2. 为什么InnoDB表建议添加主键?

    由于主键索引默认就是一个B+树。如果没有主键,MySQL会自动寻找一个不重复的列,当作主键;如果没找到,会在后台增加一列隐藏数据用于维护整张表,例如uid。

    因此建议这些维护让开发来做比较好,不要让MySQL去维护。

  3. 为什么InnoDB表建议使用整形的自增行主键。

    整形:

    • 效率高:索引是递增的,如果是字符串,还要转化为ACSIC码
    • 占用空间小:相对于uuid来说,

    自增:

    • B+树数据是自增的
    • 插入数据非自增的话,B+树维护的话非常不方便,需要进行分裂、平衡;插入自增,永远插入到后面
  4. 为什么选择B+树而不选择Hash【Hash查找会比B+树快,只要O(1)】

    • Hash仅能满足“=”、“IN”,而不能支持范围查找【seletc * form table COL3>TOM,这个范围可能在20的上面,也可能在下面】
    • 但是B+树在叶子结点上有个索引指针,【seletc * form table COL1>2,先去寻找20,然后根据指针,去继续寻找,得出一个范围】
  5. 索引为什么选择B+树。而不是B树 、红黑树、二叉树、hash

    • B树
    • 红黑树(数据量大的时候,高度会很长,导致查询次数变多)
    • 二叉树(递增数据容易变成链表,查找速度从logn变成n)
    • has(不支持范围查找)

联合索引的底层

上面说的都是单值引结构。

  • 上面有三个字段,如何排序?

    答:第一个字段相等,会比较第二个字段

  • 最左前缀

    现象:下面的SQL语句中,只有1会走索引。也就是说走索引的时候,必须最左边的索引在的时候,才会走索引

    原因:

    例如寻找age=30的时候,发现第二列索引在B+树里面不是有序的。最左边和最右边都有。

参考

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇