84.1 数据库mysql
Posted 米洛口
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了84.1 数据库mysql相关的知识,希望对你有一定的参考价值。
mysql的索引类型:普通索引、唯一索引、主键索引、组合索引、全文索引。
组合索引
Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。如:索引是 index (a,b,c),可以支持 a 或 a,b 或 a,b,c 3种组合进行查找,但不支持 b,c 进行查找。
再比如:
组合索引
create index id_name_index on testtb(id,name);
如果分别在id, name上建立单列索引,查询时和组合索引相比,效率也会不大一样,mysql只会用到其中的一个认为最有效的单列索引。
建立组合索引(id, name)相当于建立了(id,name), (id)两种索引。索引组合是从最左面开始组合的(所以没有(name)这个索引)。
此时使用以下语句会用到联合索引,提高查询效率
explain select * from testtb where id=200000 and name =’kobe200000’;
索引的缺点
1:索引会降低更新表的速度,如果对表进行Insert,update和delete操作,需要更新表,此时,Mysql不仅需要保存数据,还需要保存一下索引文件。
2:建立索引会占用磁盘空间的索引文件。如果在一个大表上创建多个组合索引,会导致索引文件很大。
不能滥用索引,尽量建立最优的索引组合。
四大特性,以及隔离级别
原子性
一致性
隔离性
持久性
指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。
愿意各吃
数据库的隔离级别。
事务隔离低级别类型会引发的问题以及优化方法。
1.读未提交内容
2.读取提交内容
3.可重复读
4.可串行化
事务的问题
多事务并发有三种异常情况,违反了隔离性:
脏读:
读到了其他事务还没有提交的数据。
不可重复读:
对某数据进行读取,发现两次读取的结果不同,也就是说没有读到相同的内容。
这是因为有其他事务对这个数据同时进行了修改或删除。
幻读:
事务 A 根据条件查询得到了 N 条数据,但此时事务 B 更改或者增加了 M 条符合事务 A 查询条件的数据,这样当事务 A 再次进行查询的时候发现会有 N+M 条数据,产生了幻读
不可重复读和幻读的区别
相同点
不可重复读 和 幻读都是在先后两次读取的时候发现不一致的情况
不同点
不可重复读是同一条记录的内容被修改了,重点在于UPDATE或DELETE
幻读是查询某一个范围的数据行变多了或者少了,重点在于INSERT。
参考资料:
[1]数据库隔离级别及原理解决方案
https://www.cnblogs.com/iQXQZX/p/14013119.html
以上是关于84.1 数据库mysql的主要内容,如果未能解决你的问题,请参考以下文章