MySQL (索引 & 事务)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: MySQL (索引 & 事务)

索引

索引是一种特殊的文件, 包含着对于数据库里所有数据的引用指针.

可以对表中的一列或多列创建索引, 并指定索引类型, 各类索引有各自的数据结构实现

索引的目的在于 快速定位, 检索数据

索引可以提高 查找 效率, 但会增加 增删改 的开销

索引创建好之后, 每次调用 查询操作 会自走索引

索引的基本操作

创建索引

create index 索引名 on 表名(列名) ;

查看索引

show index from 表名 ;

删除索引

drop index 索引名 on 表名 ;

创建主键约束, 唯一约束, 外键约束时, 会自动创建对应列的索引


MySQL 索引类型

按照 功能逻辑 区分, MySQL 索引目前有 七类, 不同的索引类型其实就是对不同内容进行限制

主键索引

数据列不允许重复, 不允许为 NULL, 一个表只能有一个主键

普通索引

MySQL 中的普通索引类型, 没有什么限制, 允许在定义索引的列中插入重复值和 NULL 值, 一个表允许创建多个普通索引

唯一索引

索引列的值必须是唯一的, 但是允许 NULL 值 (NULL 值只能有一个)

全文索引

全文索引基于倒排索引, 类似搜索引擎, 主要是为了快速检索大文本数据中的关键字信息 (模糊查询)

前缀索引

常用于 BLOG, TEXT, 或者很长的 VARCHAR, 可限制索引列的长度 (全文索引的简化版)

组合索引

指多个字段上创建的索引, 只有在查询条件中使用了创建索引时的第一个字段, 索引才会被使用 (组合索引遵循最左前缀原则)

空间索引

遵循 OpenGIS 集合数据模型规则, MySQL 5.7之后版本均支持


索引的底层实现

数据库索引的实现有: B 树, B+ 树, Hash

对于 MySQL 的 InnoDB 数据库引擎 来说, 索引是由 B+ 树 来实现的

B 树 : 就是个N叉搜索树

B+ 树 : N叉搜索树, 叶子节点类似链表一样首尾相连

Hash : 通过哈希算法计算键值, 检索时只需要一次哈希算法即可定位到数据的位置 (快)

索引失效

1.当查询中涉及的列或某些字段没有被索引时,索引将不会被使用

2.在索引列上使用函数或表达式时, 索引会失效

3.使用模糊查询时,以%开头就会造成索引失效

4.全表的扫描比索引更快 (eg: 数据量小)

5.使用not, or, <> 等非优化的逻辑运算符,索引会失效. 这是因为其无法充分利用索引。可以使用覆盖索引的方式避免失效情况

6.涉及到隐式类型转换时 (索引列的数据类型与比较的数据类型不一致时),索引会失效

事务

事务是指逻辑上的一组操作, 组成这组操作的各个单元, 要么全部成功, 要么全部失败 .


MySQL 事务的基本操作

start transaction ;

commit ;

rollback ;

MySQL 事务的特性 – ACID

Atomicity 原子性 : 把多个操作打包到一起, 要么全部执行成功, 要么全部执行失败

Consistency 一致性 : 事务执行前后, 数据库和业务逻辑应该保持一致

Isolation 隔离性 : 多个事务执行之间, 互不影响

Durability 持久性 : 事务产生的修改, 会写入硬盘, 即使事务执行过程中 程序重启 / 主机掉电 … ,待数据库重启后, 事务仍可保证数据的修改是正确的

MySQL 事务执行过程中的问题

脏读

一个事务在执行的过程中读取到了其他事务还没有提交的数据

或者说读到的数据是有问题的 (用户A正在对数据进行修改, 用户B就开始读数据, 等B读取完毕之后, A才修改完毕, 那么此时B使用的就是个错误的数据)

solve : 给写操作加锁

不可重复读

在一个事务中, 多次进行读操作, 前后读取的 数据值不同

solve : 给读操作加锁

幻读

在一个事务中, 多次进行读操作, 前后读取的 数据集不同

solve : 串行化, 彻底放弃并发

MySQL 事务的隔离级别 (隔离性的程度)

事务的隔离级别可通过 修改数据库的配置文件 来调整

隔离程度越高, 事务之间的并发程度越低, 执行效率越慢, 但数据的准确性越高


MySQL 的InnoDB 数据库默认使用的隔离级别是 可重复读 (repeatable read)

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
3月前
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
4月前
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
4月前
|
存储 关系型数据库 MySQL
MySQL数据库索引的数据结构?
MySQL中默认使用B+tree索引,它是一种多路平衡搜索树,具有树高较低、检索速度快的特点。所有数据存储在叶子节点,非叶子节点仅作索引,且叶子节点形成双向链表,便于区间查询。
169 4
|
6月前
|
存储 关系型数据库 MySQL
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
阿里面试:MySQL 一个表最多 加几个索引? 6个?64个?还是多少?
|
1月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
215 0
|
2月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
121 0
|
4月前
|
存储 SQL 关系型数据库
MySQL 核心知识与索引优化全解析
本文系统梳理了 MySQL 的核心知识与索引优化策略。在基础概念部分,阐述了 char 与 varchar 在存储方式和性能上的差异,以及事务的 ACID 特性、并发事务问题及对应的隔离级别(MySQL 默认 REPEATABLE READ)。 索引基础部分,详解了 InnoDB 默认的 B+tree 索引结构(多路平衡树、叶子节点存数据、双向链表支持区间查询),区分了聚簇索引(数据与索引共存,唯一)和二级索引(数据与索引分离,多个),解释了回表查询的概念及优化方法,并分析了 B+tree 作为索引结构的优势(树高低、效率稳、支持区间查询)。 索引优化部分,列出了索引创建的六大原则
126 2
|
4月前
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
173 1
|
5月前
|
存储 关系型数据库 MySQL
MySQL覆盖索引解释
总之,覆盖索引就像是图书馆中那些使得搜索变得极为迅速和简单的工具,一旦正确使用,就会让你的数据库查询飞快而轻便。让数据检索就像是读者在图书目录中以最快速度找到所需信息一样简便。这样的效率和速度,让覆盖索引成为数据库优化师傅们手中的尚方宝剑,既能够提升性能,又能够保持系统的整洁高效。
162 9