ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL高级:索引、事务

2021-03-08 20:33:10  阅读:195  来源: 互联网

标签:INDEX 事务 建立 myindex mytable 索引 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. 银行转账
actnobalance
11000
2100

实现账号 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、事务的隔离级别有哪些

在这里插入图片描述
读未提交

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

读已提交

  • 默认隔离级别避免了脏读,但是仍会导致不可重复读和幻读的发生。
    在这里插入图片描述

可重复读

  • 避免了脏读、不可重复读,仍会发生幻读,这是可以接受的。
    在这里插入图片描述

串行化

  • 避免了脏读、不可重复读、幻读,最高隔离基本。
    在这里插入图片描述
    总结:隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大,鱼和熊掌不可兼得啊

标签:INDEX,事务,建立,myindex,mytable,索引,MySQL
来源: https://blog.csdn.net/YJMAZ/article/details/114539460

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有