数据库基础(2)

数据库复习(进阶)

数据库的索引的数据结构为什么采用B+树?

(1)哈希索引适合等值查询,但无法进行范围查询。哈希索引是以一种key-value的存储结构,索引每个键值之间不存在任何关系,所以哈希索引不适合区间查询。
(2)哈希索引无法利用索引完成排序。
(3)哈希索引不支持多联联合索引的最左匹配规则。
(4)如果有大量的重复的键值,哈希索引的效率就很低,因为存在哈希碰撞的问题。

数据库回表?

数据库根据通过索引找到制定的记录所在行后,还需要根据索引ID再到数据块中取数据的操作,称之为回表。一般,非聚集索引的查询需要回表,聚集索引的数据和索引是放在一起的,一般不需要回表。

非聚集索引一定需要回表吗?

当一条查询语句符合覆盖索引的条件时,Mysql只需要通过索引就可以返回查询所需要的数据,这样就避免了查询到索引后的回表操作,减少I/O提交效率。

覆盖索引

如果一个索引包含了(覆盖了)满足查询语句中字段与条件的数据就叫覆盖索引(也称为索引覆盖)。

创建索引时需要考虑的因素

(1)在经常需要搜索查询的列上创建索引,可以加快搜索的速度。
(2)在作为逐渐的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。
(3)在经常用在连接的列上常见索引,这些列主要是一些外键,可以加快连接的速度。
(4)在经常需要根据范围进行搜索(排序)的列上创建索引,因为索引已经排序,其指定的范围是连续的。
(5)在经常使用where子句的列上创建索引,加快条件判断的速度。
(6)在经常出现关键字order by, group by后面的字段,创建索引。

联合索引

对多个字段同时建立的索引。需要注意的是联合索引是有顺序的(ABC和ACB是两个完全不同的联合索引),联合索引abc相当于单个索引a,ab,abc。
在创建联合索引时需要注意字段的顺序不同的字段顺序创建出的联合索引时完全不同的。联合索引的查询遵循最左前缀匹配,即如果建立一个(ABC)的联合索引,在查询时会先匹配a,在a匹配成功在匹配b,以此类推。所以,在建立联合索引时,需要将识别度最高的字段,放在字段顺序的最前面。

索引下推(Index Condition Pushdown Optimization)

在MySQl5.6中,增加了索引下推机制。
如果没有使用索引下推,MySQL会先根据索引取查询对应的数据,返回到服务器后,然后再判断查询到的数据释放满足要求。而如果使用了索引下推,mySQL会先判断索引是否符合条件,然后再利用符合条件的索引来查询数据。这样就可以减少回表的次数,提高效率。

查询器优化

一条SQL语句的查询,可以有不同的执行方案,至于最终选择哪种方案,需要通过优化器进行选择,选择执行成本最低的方案。
优化过程:
(1)根据搜索条件,找出所有可能使用的索引。
(2)计算全表扫描的代价。
(3)计算使用不同索引执行查询的代价。
(4)对比各种执行方案的代价,找出成本最低的一个。

查询的执行的流程

1、连接数据库
(1)客户端发起一条query请求,服务器端的“连接管理模块”接收请求。
(2)将请求转发到“连接进/线程模块”。
(3)调用“用户模块”来进行授权检查。
(4)通过检查后,“连接近/线程模块”从“线程连接池”中取出空闲的被缓冲的连接线程和客户端请求对接,如果失败则创建一个新的连接请求(连接池技术)。
2、处理请求
(1)查询缓冲。
通过一个大小写敏感的哈希查找,判断查询是否命中缓存中的数据。如果命中缓存,直接将缓存的结果返回给客户端。
(2)查询优化处理
(3)查询执行引擎
3、返回结果
(1)如果查询的结果可以被缓存,将结果翻入缓存中。
(2)MySql服务器将结果集返回给客户端是一个逐步的过程;数据库开始产生第一个结果时,就可以开始向客户端返回结果集。

Mysql客户端与服务器的通信特点

Mysql的客户端和服务器之间时半双工通信,即服务器和客户端之间传递数据不可以同时发生。使用的协议为TCP。
(1)客户端使用一个单独的数据报间查询传给服务器。当语句过长时,可能受到服务器Max_allowed_packet的限制。
(2)服务器响应给用户的数据通常会很多,有多个包组成。(客户端不断的接受服务器推送的数据,客户端没有办法让服务器停下来。客户端只能被动的接受)

视图

视图是从一个或者多个基本表(视图)中导出的虚拟的表,其内容有查询定义。具有普通表的结构,但是不实现数据存储。即视图是一个虚表,没有真正的数据,当执行查询操作时,还是需要取真正的表中查询。需要注意:对视图的修改会影响原表中的数据。
视图的作用:
(1)简化了操作,把经常使用的数据定义为视图。
(2)安全性,用户只能查询和修改能看到的数据。
(3)逻辑上的独立性,对视图的修改会影响原表。

数据库服务的端口

(1)MySql默认端口:3306
(2)SqlServer默认端口:1433

MySql有没有rowId(行ID,自增序列)

没有,innoDB如果没有定义主键,内部会生成一个主键编号rowid,但是外部无法查询到,如果在创建表时确定了主键,那么rowid不会自动生成。

主键、外键、超键、候选键

**超键:**在关系型数据库中能唯一标识元组的属性集称为超键。超键可以由一个或多个属性组成。超键包含主键和候选键。
**候选键:**如果一个属性集可以唯一的标识一个元组,且不包含多余的属性,那么或者属性集被称为候选键。
**主键:**用户正在使用的候选键被称为主键(不可以为空)。
**外键:**在一个表中存在另一个表的主键该键称为外键。

表1

学号姓名专业
1赵大软件工程
2钱二计算机科学与技术
3孙三软件工程

表2

专业学院
软件工程信息学院
计算机科学与技术信息学院

超键:

    学号  
    姓名  
    学号,姓名  

候选键:

	学号  
    姓名

主键:

    学号/姓名

外键:

    专业(在表2中为主键)  

主键和外键作用?

**主键的作用:**主键保证的是数据的唯一性,是能够唯一的标识一组数据的数据元素。
**外键的作用:**外键保证的是数据的一致性和完整性。外键会影响业务的扩展和修改,当数据量庞大时,会严重影响数据操作的效率。

存储过程

什么时存储过程

存储过程是在数据库系统中,一组为了完成特定功能的SQL语句集。
静态编译后存储在数据库中,用户通过指定存储过程的名字并给出参数(如果存储过程带有参数)来执行它。
通俗的说存储过程是一些编译号的SQL语句,因为系统在调用SQL的时候比较浪费时间,所以事先将一些常用的SQL语句编译好,在需要的时候调用就好了。

存储过程的优缺点

优点:
(1)提高数据库执行速度。存储过程只在创建的时候进行编译;而普通SQL语句执行一次就需要编译一次。
(2)减少数据库连接次数。
(3)减少开发人员工作量。存储过程可以重复使用,不需要每次编写,可以将一些常用的复杂操作封装成存储过程。
(4)安全性高。可以设定存储过程的使用权。
缺点:
(1)可移植性差。
(2)对于简单的SQL语句,存储过程没有优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值