【MySQL】索引与事务

2024-06-04 7224阅读

作者主页: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树图形:

【MySQL】索引与事务 第1张

B+树

特点:

是在B树基础上改动,仍然是N叉搜索树,仍然是有序的

假设一个节点上有N个key值,则N个值有N个区间

且每一个节点的最大值会重复出现在子结点中

叶子节点使用了链表将它们串起来

好处:

叶子节点存有数据的全集,比如查询id >=4 and id


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]