索引、事务、锁

索引
	一、索引的简介
		1.什么是索引?
			概念:索引是用于快速找到记录的一种数据结构,索引优化应该是对查询性能优化最有效的手段了
				索引的本质----索引是数据结构
				可以简单理解为"排好序的快速查找数据结构".
				加速查询
		2.为什么使用索引?
			简单理解:优化查询速度
			索引优化应该是对查询性能优化最有效的手段了,善用索引能够轻易将查询新能提高好几个数量级
		3.索引的优劣
			优势
				可以快速检索,检索I/O次数,加快检索速度;
				根据索引分组和排序,可以加快分组和排序
			劣势
				索引本身也是表,因此会占用存储空间
				索引表的维护和创建需要时间成本,这个成本随着数量增大而增大
				构建索引会降低数据表的修改操作(删除,添加,修改)的效率,因为在修改数据表的同时还需要索引表
		索引的底层是B树
	二、索引的使用
		A、创建索引基本语法
			关键字
				索引关键字:index
				创建关键字:create
				修改关键字:alter
			方式一:创建表同时创建索引
				create table 表名(
	列1	数据类型	约束,
	列2	数据类型	约束,
	index	索引名(列名(数据类型(长度)))
)
				create table t_test1(
id int not null,
tname varchar(20) not null,
index i_name(tname)

)
方式二:创建表之后创建索引
创建索引
create index 索引名 on 表名(列名(数据类型(长度)))
修改表结构添加索引
alter table 表名 add index 索引名(列名(数据类型(长度)))
注意事项
如果是数据类型char ,varchar类型,索引的长度可以小于字段实际长度;如果是blob和text类型,必须制定索引的长度
B、索引分类
常见的索引类型有:主键索引、唯一索引、普通索引、全文索引组合索引
普通索引:用表用的普通列构建的索引,没有任何限制,用于加速查询
语法:create index 索引名 on 表名(字段名);
唯一索引:用于简历索引的列的值必须是唯一的,允许空值
关键字:unique
语法:create unique index 索引名 on 表名(字段名);
当给某个列添加唯一约束,会自动填加唯一索引
主键索引:即主索引,根据主键pk_clolum(length)简历索引不允许重复,不允许空值
是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。一般是在建表的时候同时创建主键索引。
组合索引:用多个列组合构建的所有,这多个列中的值不允许有空值
语法:create index 索引名 on 表名(字段1,字段2);
全文索引:用大文本对象的列构建的所有,主要用来查找文本中的关键字
关键字:fulltext
语法:create fulltext index 索引名 on 表名(字段名);
C、查询索引
关键字:show
语法:show index from 表名
D、删除索引
关键字:drop
语法:drop index 索引名 on 表名
三、explain分析
作用:通过explain分析
作用:通过explain分析SQL是否使用到所有
语法:explain+SQL查询语句
例如:explain select * from mytable where username = ‘jack’
主要:如果key值为索引名称,则改查询使用了索引,如果key值为null,则表示没有使用索引
四、索引的使用规则
适合建立索引的情况
主键自动简历唯一索引
经常作为查询条件在WHERE或者ORDER BY语句中出现的列要简历索引
作为排序的列要建立索引
查询中与其他表关联的字段,外键关系建立索引
高并发条件下倾向组合索引
用于聚合函数的列可以建立索引,例如使用了max(column_1)或者count(column_1)时的columb_1就需要建立索引
不适合建立索引的情况
经常增删改的列不要建立索引
有大量重复的列不建立索引
表记录太少不要建立索引
五、小结
索引的基本概念
索引可以增加查询数据,但对于更新、创建或者删除的时候,需要去维护索引,导致性能会受影响,因此,索引也不能建立太多
索引的基本操作
创建
查询
删除
索引的分类
explain分析
事务
一、事务简介
什么是事务
事务(transaction):事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行要么全部不执行
事务只和DML语句有关,或者说DML语句才有事务
A、增删改
DML:数据操纵语言 insert update delete
B、查
DQL:数据查询语言 select from where
C、数据库控制管理语言
DCL:数据库控制语言 权限、安全
D、数据定义语言
DDL:数据库定义语言 关于数据库/表的操作 create、drop、alter
二、MySQL中事务的使用
开启事务语法
start transaction
begin
提交事务语法
commit
回滚事务语法
rollback
事务操作转账案例
三、事务的特种/条件(ACID)
原子性(A):SQL语句要么全部执行,要么全部执行,是事务最核心的特性
持久性(D):是事务的宝座,事务总结的标志(内存的数据持久到硬盘文件中)
隔离性(I):同意时间,只允许一个事务请求同一数据,不同的事务之间彼此之间彼此没有任何干扰
事务之间的影响
与其他特征不同,侧重于研究事务本身不同,隔离性研究的是不同事务之间的相互影响
数据库允许多个并发事务同时对其数据进行读写和修改的能力隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致,事务隔离分为不同级别,包括未提交(Read uncommitted)、读提交(read committed)、可重复读(repetable read)和串行化(Serialiazble)
一致性(C):一致性是指事务执行结束后,数据库的完整性没有被破坏,数据保持合法。
原子性、持久性、隔离性最终促成了一致性
四、事务并发操作问题
脏读:当前事务(A)中可以读到其他事务(B)为提交的数据(脏数据),这种现象是脏读
不可重复读:在事务A中先后两次读取同一数据,两次读取的结果不一样,这种现象称为不可重复读
脏读与不可重复读的区别在于:前者读到的是其他事务未提交的数据,后者读到的是其他事务已提交的数据。
脏读:读取未提交数据
不可重复读:读取已提交数据
幻读:在事务A中按照某个条件先后两次查询数据库,两次查询结果的条数不同,这种现象称为幻读
不可重复读与幻读的区别可以通俗的理解为:前者是数据变了,后者是数据的行数变了。
隔离性是多个事务之间的,会有并发操作问题
五、事务的隔离级别
读未提交(read uncommitted)
最低隔离级别,会发生脏读,不可重复读,幻读
读已提交(read committed)
只能避免脏读
可重复读(repeatable read)
避免李脏读和不可重复读,会发生幻读
串行化(serializable)
数据绝对严谨
避免脏读,不可重复读,幻读
设置隔离级别 set session transaction isolation level + 隔离级别
六、注意
1、在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务
2、MySQL中事务是自动提交的,如果需要使用事务,必须手动开启
3、隔离级别月底,系统开销月底,可支持的并发越高,单隔离性也越差。隔离级别越高,系统开销越高,可支持的并发越低,单隔离性也越好
小结
1、事务的基本操作
2、ACID
原子性(A):SQL语句要么全执行,要么全不执行,是事务最核心的特性
持久性(D):保证事务提交后数据的永久,不会丢失,是事务的保证,事务终结的标志
隔离性(I):保证事务执行尽可能不受其他事务影响
一致性©:原子性、持久性和隔离性,都是为了保证数据库状态的一致性。
C(一致性)是目的,A(原子性)、I(隔离性)、D(持久性)是手段,是为了保证一致性,数据库提供的手段。数据库必须要实现AID三大特性,才有可能实现一致性。
3、并发操作问题
4、隔离级别

乐观锁
悲观锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值