Day11-mysql基础篇之索引

本文详细介绍了数据库事务的实现原理,包括InnoDB存储引擎中的日志文件在事务提交和回滚中的作用。同时,讨论了MySQL的默认事务行为及如何手动管理事务。接着,深入探讨了索引的概念、作用、创建与删除,以及索引的失效情况。在数据库优化中,索引扮演着重要角色。最后,提到了视图的概念、创建与删除,以及视图在实际开发中的应用场景。
摘要由CSDN通过智能技术生成

关于事务还有一点补充的东西,就是一个事务是怎么实现的?

在InnoDB存储引擎中,提供了一组用于记录事务性活动的日志文件。在事务的执行过程中,每一条DML语句操作都会记录到‘事务性活动的日志文件’中。在事务的执行过程中我们可以提交事务也可以回滚事务。

提交事务

        清空事务性活动的日志文件。将数据全部持久化到数据库表中。标志事务的结束

回滚事务

        将所有的操作全部撤销,并且清空事务性活动的日志文件,并且事务的结束。以失败的方式。

mysql中默认的事务行为是什么样的?

        自动提交。那么交给我们来管理事务应该怎么做呢?使用命令 start transaction;关闭了自动提交。

索引

        所谓的索引,就是在数据库表中的字段上添加的一种让我们提高查询效率的机制。为了缩小扫描范围的一种机制。

        没有添加索引就一条记录一条记录的匹配,全表扫描,添加了索引就是根据索引找到一个范围位置,然后再这个范围内做局域性的扫描。

        实际上索引也是一张表,该表保存了主键和索引字段,并且指向了实体表的记录。

        创建索引的时候,需要确保索引是应用在查询语句的条件中

        同样索引也是需要排序的,并且索引的排序和TreeSet数据结构相同。TreeSet底层是一个自平衡的二叉树。mysql中的索引是一个B-Tree数据结构。使用左小右大的方式进行存放。

索引的实现原理

(自平衡二叉树)B树,

 每一条记录在磁盘上都有一个物理的编号。例如查101号记录,通过索引对象快速定位到101(缩小扫描范围)得到物理编号,进行sql语句的转换,查询条件编程查询物理编号。这是最简单的实现原理。

什么情况下我们会添加索引?

        数据量非常庞大的时候;该字段经常出现在where字段的后面,经常被扫描。该字段很少进行增删改(DML)操作。

        建议使用主键去查询,或者通过unique来查,不建议随便添加索引。因为索引还需要进行维护。

创建索引

-- 创建索引 --
create index '索引名' on '表名'('字段名');
-- 删除索引 --
drop index '索引名' on '表名';
-- 查看sql语句是否用了索引--
explain select * from 表名 where 存在索引的字段名的条件
-- 复合索引 --
create index '索引名' on '表名' ('字段名1','字段名2');

索引失效情况

        模糊查询‘%’开头失效,这是一种优化手段。原因是查找的时候使用第一个字母进行匹配。

        使用or的时候会失效,要求两边的字段都要索引,才会走索引。

        使用复合索引的时候,没有使用左侧的列查找索引失效。

        在where条件中,索引列参加了数学运算。

        where当中索引列使用了函数。

索引在数据库进行优化的时候是优先考虑的因素

索引分类

        单一索引

        复合索引

        主键索引

        唯一性索引:具有unique约束的字段上添加索引

注意,唯一性所以比较弱的字段上添加索引用处不大

补充知识:

视图

什么是视图?

        view:站在不同的角度去看待同一份数据。

怎么创建视图对象?怎么删除视图?

-- 表复制 --
create table 新表 select * from 旧表 where 查询条件;
-- 复制表方式2 --
create table 新表 like 旧表;

-- 删除视图 --
drop view 视图名;
-- 创建视图 --
create view '视图名' as 查询语句;

视图有什么用?

        面向视图对象的增删改查会导致原表的数据被修改。

视图对象在实际开发中有什么用?

        简化sql语句的书写,我们以后在面向视图开发的时候,使用视图的时候可以像使用table一样,可以对视图进行增删改查等操作,视图不是在内存中,而是在物理硬盘中,不会消失。

DBA命令(了解)

-- 创建新用户 --
create user 用户民 identified by 该用户的登录密码
-- 数据的导入 --
登录mysql服务器,创建同名数据库,使用数据库
source 数据文件的绝对路径
source D:\ssm_db.sql
-- 数据的导出 --
mysqldump -u root -p 数据库名>导出的路径
mysqldump -u root -p spring_db > D:\ssm_db.sql

数据库设计三范式

数据库表设计需要遵守的规则,

        要求任何一张表都有主键,每一个字段原子性不能再分

        建立在第一范式的基础上,要求所有的非主键字段完全依赖于主键,不要产生部分字段依赖

        建立在第二范式的基础上,要求所有非主键字段直接依赖主键。不要产生传递依赖。

 数据库表的设计尽量满足客户的需求,以客户需求为准。

多对多三张表,关系表两外键。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值