MySQL高级:索引、事务

索引、事务和锁

一、索引

1、索引简介

  1. 什么是索引
    索引是存储引擎用于快速找到记录的一种数据结构

  2. 为什么要有索引
    索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。

  3. 索引的优劣势
    优势:可以快速检索,减少 I/O 次数,加快检索速度
    劣势:会占用存储空间、维护和创建需要时间成本、降低数据表的修改操作(删除,添加,修改)的效率

2、MySQL 中索引的使用

  1. 创建索引
CREATE TABLE mytable(
ID INT NOT NULL, 
username VARCHAR(16) NOT NULL, 
INDEX myindex (username(16))
);

2.查看索引

SHOW INDEX FROM mytable

3、创建索引

CREATE INDEX myindex ON mytable(username(16));
或者
ALTER table mytable ADD INDEX myindex(username

4、删除索引

DROP INDEX myindex ON mytable;
或者
ALTER TABLE mytable DROP INDEX myindex;

3、索引的使用规则

  1. 索引的分类
主键索引 即主索引,根据主键 pk_clolum(length)建立索引,不允许重复,不允许空值
唯一索引 用来建立索引的列的值必须是唯一的,允许空值
普通索引 用表中的普通列构建的索引,没有任何限制
全文索引 用大文本对象的列构建的索引
组合索引 用多个列组合构建的索引,这多个列中的值不允许有空值
  1. 什么情况适合建立索引什么情况不适合建立索引
适合 不适合
主键自动建立唯一索引 经常增删改的列不要建立索引
经常作为查询条件在 WHERE 或者 ORDER BY 语句中出现的列要建立索引 有大量重复的列不建立索引
作为排序的列要建立索引 表记录太少不要建立索引
查询中与其他表关联的字段,外键关系建立索引
高并发条件下倾向组合索引
用于聚合函数的列可以建立索引

提示:查看索引是否有效,可以使用 explain 命令查询

二、事务

1、事物简介

事务(Transaction):一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务

事务案例

  1. 银行转账
actno balance
1 1000
2 100

实现账号 1 向账号 2 转账 100 元

update t_act set balance=balance-100 where actno=1;
update t_act set balance=balance+100 where actno=2;

2、MySQL 中事务的使用方法

  1. 开启事务
start transaction;
或者
begin transaction;
  1. 提交事务
commit;
  1. 回滚事务
rollback;

3、事务有什么特征

原子性 事务是最小单位,不可再分
一致性 事务要求所有的 DML 语句操作的时候,必须保证同时成功或者同时失败
隔离性 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰
持久性 是事务的保证,事务终结的标志(内存的数据持久到硬盘文件中)

4、事务的隔离级别有哪些

MySQL高级:索引、事务
读未提交

  • 最低级隔离级别,会发生脏读、不可重复读、幻读发生。

读已提交

  • 默认隔离级别避免了脏读,但是仍会导致不可重复读和幻读的发生。
    MySQL高级:索引、事务

可重复读

  • 避免了脏读、不可重复读,仍会发生幻读,这是可以接受的。
    MySQL高级:索引、事务

串行化

  • 避免了脏读、不可重复读、幻读,最高隔离基本。
    MySQL高级:索引、事务
    总结:隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊
上一篇:组合索引,二级索引(转)


下一篇:vue CLI3 创建项目以后运行出现unavailable