数据库--->MySQL(1)【MySQL索引】

文章目录

  • MySQL的优点
  • 视图
  • MySQL的存储过程与函数
  • 触发器
  • MySQL的基本架构
  • MySQL的引擎
    • InnoDB
    • MyISAM
    • 总结
  • 索引
    • 什么是索引?
    • 索引的优缺点
    • 索引底层数据结构
    • 索引的分类
    • 创建索引的原则

MySQL的优点

MySQL 主要具有下面这些优点:

  1. 成熟稳定,功能完善。
  2. 开源免费。
  3. 文档丰富,既有详细的官方文档,又有非常多优质文章可供参考学习。
  4. 开箱即用,操作简单,维护成本低。
  5. 兼容性好,支持常见的操作系统,支持多种开发语言。
  6. 社区活跃,生态完善。
  7. 事务支持优秀, InnoDB 存储引擎默认使用 REPEATABLE-READ 并不会有任何性能损失,并且,InnoDB 实现的 REPEATABLE-READ 隔离级别其实是可以解决幻读问题发生的。
  8. 支持分库分表、读写分离、高可用。

视图

视图就是将一条sql语句封装起来,之后使用sql时,只需要查询试图即可,视图不保存数据。

-- 定义一个视图
create view view_admin as select * from admin
-- 使用视图
select * from view_admin
-- 删除视图
drop view view_admin

MySQL的存储过程与函数

存储过程就是一组预定义的 SQL语句结合,存储在数据库中并分配一个名称,可以在需要时进行调用;函数是一段预定义的SQL代码,用于执行特定的计算或操作,并返回结果。函数类似于存储过程,但是函数通常返回一个值,而存储过程可以执行多个操作不一定返回结果。两者的区别是函数一般接收参数并返回值,用于计算、转换和处理数据。而存储过程一般执行一系列的操作和业务逻辑,通常用于处理复杂的业务逻辑,管理事务或执行批处理操作。

触发器

触发器是一种特殊的存储过程,不需要用户直接进行调用,会在用户对表进行增删改操作之前或之后自动触发,

MySQL的基本架构

MySQL的基本架构主要有以下几层:

连接层:负责接收客户端的连接请求,可以进行认证(验证账号密码)

服务层:接收sql,语言解析,优化,缓存

引擎层:引擎层是真正落实实现的具体方式,不同的存储引擎特点不同

物理文件存储层:使用各种文件用来存储数据,以及各种日志文件

MySQL基本架构的核心组件:

连接器: 身份认证和权限相关(登录 MySQL 的时候)。

查询缓存: 执行查询语句的时候,会先查询缓存(MySQL 8.0 版本后移除,因为这个功能不太实用)。

解析器: 没有命中缓存的话,SQL 语句就会经过分析器,分析器说白了就是要先看你的 SQL 语句要干嘛,再检查你的 SQL 语句语法是否正确。

优化器: 按照 MySQL 认为最优的方案去执行。

执行器: 执行语句,然后从存储引擎返回数据。 执行语句之前会先判断是否有权限,如果没有权限的话,就会报错。

插件式存储引擎:主要负责数据的存储和读取,采用的是插件式架构,支持 InnoDB、MyISAM、Memory 等多种存储引擎。

MySQL的引擎

MySQL的默认存储引擎是InnoDB,并且所有的存储引擎中只有InnoDB是事务性存储引擎。

InnoDB

优点: InnoDB是事务型存储引擎,它支持ACID特性,支持行级锁(一个事务对某行数据操作时,只会锁定某一行数据,不锁定其他行,效率高),提供了更好的MVCC机制,支持外键约束,支持缓存,支持全文索引。

缺点: 相较于MyISAM,InnoDB的存储和管理需要更多的内存和磁盘空间,同时也对CPU的要求较高。

MyISAM

优点: MyISAM简单易于管理,支持表锁(进行dml操作时会锁定整张表),主要用户查询多,增删改较少的场景。支持全文索引,存储表的总行数。

缺点: MyISAM不支持事务和行级锁,不支持主外键

总结

  • InnoDB 支持行级别的锁粒度,MyISAM 不支持,只支持表级别的锁粒度。
  • MyISAM 不提供事务支持。InnoDB 提供事务支持,实现了 SQL 标准定义了四个隔离级别。
  • MyISAM 不支持外键,而 InnoDB 支持。
  • MyISAM 不支持 MVCC,而 InnoDB 支持。
  • 虽然 MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作为索引结构,但是两者的实现方式不太一样。
  • MyISAM 不支持数据库异常崩溃后的安全恢复,而 InnoDB 支持。
  • InnoDB 的性能比 MyISAM 更强大。

索引

什么是索引?

索引是一种用于快速查询和检索数据的数据结构,其本质可以看成是一种排序好的数据结构。

索引的作用就相当于书的目录。打个比方: 我们在查字典的时候,如果没有目录,那我们就只能一页一页的去找我们需要查的那个字,速度很慢。如果有目录了,我们只需要先去目录里查找字的位置,然后直接翻到那一页就行了。

索引的优缺点

优点:

  1. 使用索引可以大大加快 数据的检索速度(大大减少检索的数据量), 这也是创建索引的最主要的原因。
  2. 过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。

缺点:

  1. 创建索引和维护索引需要耗费许多时间。当对表中的数据进行增删改的时候,如果数据有索引,那么索引也需要动态的修改,会降低 SQL 执行效率。
  2. 索引需要使用物理文件存储,也会耗费一定空间。

大多数情况下,索引查询都是比全表扫描要快的。但是如果数据库的数据量不大,那么使用索引也不一定能够带来很大提升。

索引底层数据结构

常见的索引结构有: B 树, B+树 和 Hash、红黑树。在 MySQL 中,无论是 Innodb 还是 MyIsam,都使用了 B+树作为索引结构。
—>B树、B+树详解
数据库--->MySQL(1)【MySQL索引】_第1张图片

索引的分类

底层存储方式:

聚簇索引:所查即所得,找到了索引就是找到了数据,例如主键索引。

非聚簇索引:索引和数据是分离的,找到了索引,还没有找到数据,需要根据主键,再次回表查询,在MyISAM引擎中,除了主键列,其他都是非聚簇索引

判断聚簇索引和非聚簇索引的方法
数据库--->MySQL(1)【MySQL索引】_第2张图片

按照应用维度分:

主键索引:查询加速,列值唯一(不能为NULL),表中只有一个

普通索引:仅查询加速

唯一索引:查询加速,列值唯一

覆盖索引:一个索引包含(或覆盖)所有查询字段的值

联合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本的内容进行分词,与其他索引类型不同,全文索引并不存储整个字符串的值,而是存储关键字

创建索引的原则

哪些情况创建索引

  • 主键自动建立唯一索引
  • 频繁作为查询条件的字段应该创建索引(where后面的语句)
  • 查询中与其他表关联的字段,外键关系建立索引
  • 查询中排序的字段,外键关系建立索引

哪些情况不建议创建索引

  • 表记录太少
  • 经常增删改的表,提高了查询速度,同时降低了更新表的速度
  • where条件里用不到的字段
  • 数据重复且分布均匀的表字段,

你可能感兴趣的:(#,MySQL,数据库,MySQL,索引,触发器)