1. 索引
1.1 概念
索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结构实现
1.2 使用
查看索引
show index from 表名;
创建索引
create index 索引名 on 表名( 字段名);
删除索引
drop index 索引名 on 表名;
1.3 作用
1)数据库中的表、数据、索引之间的关系,类似于书架上的图书、书籍内容和书籍目录的关系。
2)索引所起的作用类似书籍目录,可用于快速定位、检索数据。
3)索引对于提高数据库的性能有很大的帮助
索引是如何提高查找效率的(索引背后的数据结构是什么样子的)
B+ 树(N叉搜索树)
以后会单独写一篇讲 B+ 树
1.4 使用场景
要考虑对数据库表的某列或某几列创建索引,需要考虑以下几点:
· 数据量较大,且经常对这些列进行条件查询。
· 该数据库表的插入操作,及对这些列的修改操作频率较低。
· 索引会占用额外的磁盘空间。
满足以上条件时,考虑对表中的这些字段创建索引,以提高查询效率。
反之,如果非条件查询列,或经常做插入、修改操作,或磁盘空间不足时,不考虑创建索引。
在一个表里建立的索引越多,占用的存储空间也越多,再增删改或者生成执行计划时性能也就越差
1.5 常见面试题
2.事务
2.1 概念
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全部成功,要么全部失败。
在不同的环境中,都可以有事务。对应在数据库中,就是数据库事务
2.2 索引的特性
1)原子性: 事务的根本所在(事务存在的意义),能够把多个 SQL 打包成一个整体,要么都执行,要么不执行(执行出错会自动回滚)
2)一致性: 事务执行前后,数据处在 “一致” 的状态(数据可以对上)
3)持久性: 事务进行的改动,都是写到硬盘里,不会随着程序重启/主机重启而丢失
4)隔离性: 多个事务,并发执行的时候,事务之间能够保持"隔离",不互相干扰
MySQL中的隔离级别:
1.read uncommitted 允许读未提交的数据,并发程度最高,隔离性最低,可能存在 脏读/不可重复读/幻读 问题
2.read committed 只能读提交之后的数据. 相当于 写加锁.并发程度降低, 隔离性提高,解决了脏读,可能存在 不可重复读/幻读 问题
3.repeatable read(默认) 相当于读和写都加锁了.并发程度再降低,隔离性再提高,解决了脏读/不可重复读,可能存在 幻读 问题
4.serializable 严格执行串行化,并发程度最低,隔离性最高,解决了脏读/不可重复读/幻读问题,效率最低
2.3 使用
2.4 常见面试题