【MySQL】索引与事务
作者主页:paper jie_博客
本文作者:大家好,我是paper jie,感谢你阅读本文,欢迎一建三连哦。
本文录入于《MySQL》专栏,本专栏是针对于大学生,编程小白精心打造的。笔者用重金(时间和精力)打造,将MySQL基础知识一网打尽,希望可以帮到读者们哦。
其他专栏:《算法详解》《C语言》《javaSE》《数据结构》等
内容分享:本期将会分享MySQL表的索引与事务
目录
索引
什么是索引
作用
索引的使用
查看索引
创建索引
删除索引
索引的利弊与场景使用
*索引使用的数据结构*
B树
B+树
事务
什么是事务
为什么要有事务
事务的使用
*事务的特性*
原子性
一致性
持久性
*隔离性*
经典bug1: 脏读
经典bug2: 不可重复读
经典bug3: 幻读
注意
索引
什么是索引
索引是一种特殊的文件,包含对数据表中所有记录的引用指针.可以对表中的一列或多列创建索引,还可以指定索引,个类索引都会有各自的数据结构来实现
作用
数据库中的表,数据,索引他们的关系就是字典,字典中的字,字典的目录关系
索引所起到的作用就是帮助数据快速定位,检索数据
索引对于提高数据库查找的性能有很大的帮助
索引的使用
这里,我们要知道, 创建一些约束,如:primary key, unique, foreign key 时,会自动创建索引.
查看索引
show index from 表名;
栗子:
mysql> show index from student; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | student | 0 | PRIMARY | 1 | id | A | 8 | NULL | NULL | | BTREE | | | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
创建索引
对于非主键,唯一约束,外键的字段,可以创建普通索引
create index 索引名 on 表名(字段);
栗子:
mysql> show index from course2; Empty set (0.00 sec) mysql> create index idx_id on course2(id); Query OK, 0 rows affected (0.05 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show index from course2; +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | course2 | 1 | idx_id | 1 | id | A | 3 | NULL | NULL | YES | BTREE | | | +---------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
删除索引
drop index 索引名 on 表名;
栗子:
mysql> drop index idx_id on course2; Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
索引的利弊与场景使用
索引它也不是完全有利的,索引是一种数据结构,它也会占一定的磁盘空间,有额外的开销.且在改动数据的时候,索引也需要更新,这也会占用一定的时间开销.所以我们在使用索引的时候需要考虑以下几点:
1. 数据量较大,且经常对这些列进行查询
2. 该数据库中的数据修改或新增操作频率低
3. 索引会占据额外的磁盘空间
*索引使用的数据结构*
在数据库中,索引使用的数据结构是B+树,而B+树是有B树演变过来的
B树
特点:
B树它是一个N叉搜索树
它的节点上的值是有序的
假设一个节点上有N个key,这N个值又会划分出N+1个区间
好处:
它树的高度比二叉搜索树降低了很多
在使用B树查询的时候,一个结点比较的次数虽然多了,但同一个节点的key只需要一次硬盘IO,而比较又是在内存中进行,速度就快了不少
B树图形:
B+树
特点:
是在B树基础上改动,仍然是N叉搜索树,仍然是有序的
假设一个节点上有N个key值,则N个值有N个区间
且每一个节点的最大值会重复出现在子结点中
叶子节点使用了链表将它们串起来
好处:
叶子节点存有数据的全集,比如查询id >=4 and id