mysql进阶

mysql进阶

1.存储引擎

存储引擎就是存储数据,建立索引,跟新/查询等技术的实现方式,存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称作表类型.

-- 查询建表语句 默认的存储引擎是InnoDB
show  create table history

-- 创建表的时候指定存储引擎
create table tableName(
    ...
) engine = InnoDB(不指定的默认)

-- 查询当前数据库支持的存储引擎
show engines

1.存储引擎的特点

1.InnoDB

InnDB是一种兼顾高可靠性和高性能的通用存储引擎,在MYSQL5.5后 ,InnoDB默认是MYSQL的存储引擎.

特点

  • DML(正删改语句)操作操作 遵循ACID(事务的四大特性)模型,支持事务
  • 行级锁,提高并发访问性能
  • 支持外键约束,保证数据的完整性和正确性
逻辑存储结构
  1. 表空间(TableSpace)
  2. 段(Segment)
  3. 区(Extent)(1M)
  4. 页(Page)(16k)
  5. 行(Row)

mysql进阶_第1张图片

mysql进阶_第2张图片

索引

1.优点:

提高数据库检索的效率,通过索引对数据进行排序,降低数据成本,降低 CPU的消耗

2.缺点:

索引列也要占用空间,索引大大提高了查询效率,但是却也降低更新表的速度.

3.索引的数据结构

MYSQL的索引实在存储引擎层实现的,不同的存储引擎有不同的结构

  • b+tree索引:最常见的索引,只有精确度匹配索引列的查询才有效,不支持查询范围
  • Hash索引:底层数据结构是用哈希表实现的,只有精确匹配索引列的查询才有效,不支持范围查询
  • r_tree索引(空间索引)空间索引是 myisam引擎的一个特殊索引类型,主要用于清理空间数据类型,通常使用较少
  • full_text(全文索引)是一种通过建立倒序排序索引,快速 匹配文档的方式

索引结构

二叉树

mysql进阶_第3张图片

查询索引的时候可以对半查找,但是有可能成为单向链表查询性能会大大降低,大数据量情况下,层级较深,索引速度慢

红黑树

mysql进阶_第4张图片

可以自平衡,但是 大量数据下层级越深,检索 速度慢

B-Tree

树的度数:值的是一个节点的子节点的个数,演变过程:达到最大度数-1中间节点向上分裂,

B+Tree

数据存放在叶子节点,叶子节点是一个链表,最后实现了单链表,非叶子节点起到索引的作用.

MYSQL对经典的B+Tree进行了优化.在原B+Tree的基础上,增加一个指向相邻叶子结点的的链表指针,形成了带有顺序的B+Tree

Hash索引

通过一定的hash算法,将键值换算成新的hash值,映射到对应的槽位上,然后存储在hash表中

特点:

  1. Hash索引只能用于对等比较(= ,in)不支持范围(between,<,>)
  2. 无法利用索引来完成排序工作
  3. 查询效率高,通常只需要一次检索就够了(不出现hash碰撞的情况下)

存储引擎支持:memory InnDB具有自适应hash索引

面试问题

为什么InnDB存储引擎选择使用B+Tree索引?

  • 相对于二叉树,层级更少,搜索效率高
  • 相对于b树无论是叶子节点还是非叶子节点,都会保存数据,导致一页中存储的键值减少,指针跟着减少,要保存大量数据,只能增加树的高度

选择使用B+Tree索引?

  • 相对于二叉树,层级更少,搜索效率高
  • 相对于b树无论是叶子节点还是非叶子节点,都会保存数据,导致一页中存储的键值减少,指针跟着减少,要保存大量数据,只能增加树的高度

你可能感兴趣的:(mysql,数据库)