从化建设局网站关停,南昌金启网站建设,郑州加盟做网站,百度云域名备案1.索引1.1概念索引是一种特殊的文件#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引#xff0c;并指定索引的类型#xff0c;各类索引有各自的数据结果实现。#xff08;这里只用通俗的语言和图片进行介绍#xff09;1.2作用数据库中的表…1.索引1.1概念索引是一种特殊的文件包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引并指定索引的类型各类索引有各自的数据结果实现。这里只用通俗的语言和图片进行介绍1.2作用数据库中的表、数据、索引之间的关系类似于书架上的图书、书籍内容和书籍目录的关系。索引所引起的作用类似书架目录可用于快速定位、检索数据。索引对于提高数据库的性能有很大的帮助。1.3使用场景要考虑数据库表的某列或某几列创建索引需要考虑以下几点数据量较大且经常对这些列进行条件查询。该数据库表的插入操作以及对这些列的修改频率比较低。索引会占用额外的磁盘空间。满足以上条件时考虑对表中的这些字段创建索引以及提高效率。反之如果非条件查询列或经常做插入、修改操作或者磁盘空间不足时不考虑创建索引。1.4使用创建主键约束primary key)、唯一约束unique)、外键约束foreign key)时会自动创建对应列的索引。查看索引show index from table_name;【案例】查看学生表已有的索引创建索引对于一些非主键、非唯一约束、外键的字段可以创建普通索引create index 索引名 on 表名(字段名);【案例】创建班级表中name字段的索引删除索引drop index 索引名 on 表名【案例】删除班级表中name字段的索引【注意】我们目前使用on的情况只用jion ... on, drop index ... oncreate index ... on1.5案例准备测试表创建、展示、删除索引1.6索引背后的数据结构常见面试题索引时通过B树的数据结构来实现数据的查找的。1.6.1 B树B-树我们先了解B-树也叫做B树。【注意】“-读作杠不是减。【解析】B树是一个度为N的树在关键值key左边的节点都比key小在关键字key右边的节点都比key大。树的高度越高进行查询比较的时候访问磁盘的次数越多速度越慢。无法进行模糊匹配和范围查询很复杂需要来回找B树就是在此基础上进行改进的1.6.2 B树B树也叫N叉搜索树。【解析】每个节点的最右边即为这颗子树的最大值每个节点中最大值都会重复出现叶子节点会首尾相连【优势】能进行范围查询和模糊匹配每个key都会在叶子节点出现不用来回查找占用内存小只有叶子节点才会储存完整的信息非叶子节点只会存储key值我们可以将索引直接放到内存中也不会占用很大的空间。这样做大大减少了访问硬盘的次数提高了查找的效率。所占内存大小估计假设每个key值占4个字节总共有10亿条数据所占内存3.73G是非常小的。3.查找次数稳定每个数据的完整信息都是在叶子节点查找的次数都是相同的。不会出现个别数据查找的特别慢。2.事务常见面试题2.1为什么使用事务-- 使用事物的原因
update account set money money - 2000
where name 顾客;
update account set money money 2000
where name 商家;比如上述是一个转账过程。在执行完第一条命令的时候如果服务器突然宕机就会出现钱扣了但是商家没有收到钱的情况。【解决方案】使用事物来控制保证两条语句是完全执行的要么完全失败。2.2事务的概念事务指逻辑上的一组操作组成这组操作的各个单元要么成功要么失败。在不同的环境中都可以有事务。对应在数据库中就是数据库事务。2.3使用-- 使用事务
start transaction;
update account set money money - 2000
where name 顾客;
update account set money money 2000
where name 商家;
commit;开始事务start transaction;执行多条SQL语句回滚或者提交rollback/commit2.4事务的四大特性重点原子性[核心的特征]事务具有原子性即不可分割性。要么完全执行要么不执行不会出现只执行一般宕机的情况。如果服务器在执行事务过程中突然停电那么在来电的时候会进行回滚恢复到原来的数据状态。一致性执行事务前后数据是可靠的。例如上述转账的事务如果事务成功商家会收到钱顾客会减少余额。不会出现其他的情况。如果事务失败顾客的钱不会减少商家的钱不会增多。同样不会出现其他情况。持久性事务修改的内容是写到了硬盘上的持久存在的。宕机、重启、断电等都不会影响到数据的安全。隔离性重点隔离性是为了解决“并发”执行事务而引起的问题。2.4.1隔离性并发多个事务同时读取了一个数据。【形象的例子】一个饭馆在同一时间同时进来多个顾客我们应当先服务谁脏读问题【形象的例子】比如老师正在写笔记网上同学可能会看老师的笔记看来一会就离开了。然后老师继续写笔记并修改了它。最后上课的时候发现老师的笔记和昨天看到的不一样了。这就产生了脏读问题。【对应的实例】我们在某个游戏中充钱当我们执行完充钱操作业务没有结束用户进行查看发现钱已经有了但是后来业务回滚导致钱又消失了。这会让用户产生疑惑。【解决方法】为了解决脏读问题mySQL引入了“写操作加锁”的机制。只有数据被写完并解锁后才能被其他事务使用。这个写操作加锁可以降低并发程度提高了隔离性。但是加锁开锁需要时间减低了效率。【实质】在写的时候读导致用到了无效的数据。不可重复读【形象的例子】当老师写完笔记后记作版本1同学也在阅读笔记。此时老师认为有些地方写的不好需要修改当老师再次提交到网上的时候同学发现读着读着笔记变了。就会造成不可重复度的问题。【对应的实例】我们给游戏中2023.03.03 12:00:00中此时用户点卷达到1000的用户送10点卷达到2000点卷的用户送20点卷。有个玩家在此时点卷数是1000我们送给他10点卷送10点卷的语句结束送20点卷语句没执行且处于同一业务。此时此玩家充值了1000点卷达到2000点卷导致又送了20点卷给他。前后送了30点卷。我们应当以同一时刻下的点卷数为准不应让数量得到修改。【解决方法】对读加锁在一个数据被读的时候不能被写操作。这也会降低效率的但是降低了并发程度。【实质】在读的时候写导致两次读的结果不一样。幻读当前已经约定对读加锁、对写加锁解决了不可重复度和脏读问题。【形象的例子】在事务A中我们在首先读取表A的所有数据时得到了全部的数据。并删除了所有的数据。但是另一个事务突然向表中插入数据。然后事务A有读取整张表的数据本应为空的表有了数据最后的到了不可预期的结果。【本质】在操作一张表时数据又进行了增删导致数据量改变。