1.什么是数据库?

MYSQL是一个关系型数据库管理系统。在Java企业级开发中非常常用,因为MYSQL是开源免费的,并且方便扩展。

2.数据库的三大范式是什么?

第一范式:每个列都不可以再拆分;

第二范式:在第一范式的基础上,非主键完全依赖于主键,而不能是依赖于主键的一部分;

第三范式:在第二范式的基础上,非主键只依赖于主键,不依赖于其他非主键。

3.SQL的几种连接查询方式

1.内连接(inner join)

内连接查出的是两张表的交际,两张表都有的才会查出来

2.外连接(left join)

以左表为主表,查询全部,右表为辅表(没有的数据显示null)

3.右外连接(right join)

以右表为主表,查询全部,左表为辅表(没有的数据显示null)

4.全连接(full join)

两个表所有的数据全部查询出来

4.SQL查询的基本原理

单表查询:根据WHERE条件过滤表中的记录,形成中间表(这个中间表对用户是不可见的);然后根据SELECT的选择列选择相应的列返回最终结果

两表连接查询:对两表求积(笛卡尔积)并用ON条件和连接类型进行过滤形成中间表;然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询结果

多表连接查询:先对第一个和第二个表按照两表连接做查询,然后用查询结果和第三个表做连接查询,以此类推,直到所有的表都连接上为止,最终形成一个中间的结果表,然后根据WHERE条件过滤中间表的记录,并根据SELECT指定的列返回查询条件。

5.MYSQL存储引擎MyISAM和InnoDB区别?

InnoDB引擎:InnoDB引擎提供了对数据库事务的支持,并且提供了行级锁和外键的约束。它设计的目的就是处理大数据容量的数据库系统

MyISAM引擎:不提供事务支持,也不提供行级锁和外键。

存储引擎选择:

MyISAM:适用于管理非事务表,它提供高速存储和检索,以及全文搜索能力的场景,比如博客系统或者门户网站等。

InnoDB:适用于更新操作频繁,或者要保证数据的完整性,并发量高,支持事务和外键的场景。

InnoDB

MyISAM

存储结构

每张表都保存在同一个数据文件中

每张表被存放在三个文件:表定义文件,数据文件、索引文件

数据和索引存储方式

数据和索引是集中存储的,查询时做到覆盖索引会非常高效

数据和索引是分开存储的,索引的叶子结点存储的是行数据地址 ,需要再寻址一次才能得到数据

记录存储顺序

按主键大小有序插入

按记录插入顺序保存

索引

聚簇索引

非聚簇索引

索引实现方式

B+数索引

B+数索引

全文索引

不支持

支持

哈希索引

支持

不支持

外键

支持

不支持

事务

支持

不支持

锁粒度

行级锁定,表级锁定,锁定力度越小支持并发力度越高

表级锁定

SELECT

更优

select count(*)

更快

增删改

更快

 6.什么是索引

索引是一种数据结构,是数据库管理系统中一个排序的数据结构,以协助快速查询数据库表中数据,索引的实现通常使用B+数或hash表

更通俗的说,索引就相当于是目录,为了方便查找书中的内容,通过对内容建立索引形成目录。

 7.索引有哪些优缺点?

优点:

1.可以大大加快数据的检索速度,这也是创建索引的主要原因。

2.通过索引的创建,可以在查询过程中,使用优化器,提高系统的性能。

缺点:

1.时间方面:创建索引和维护索引需要耗费时间,具体的,对于表中的数据进行增删改的时候,索引也需要动态维护,降低增删改的效率

2.空间方面:索引是需要占据物理空间的。

8.索引有哪几种类型

主键索引:数据列不允许重复,不允许为NULL,一个表只能有一个主键;

唯一索引:数据列不允许重复,允许为NULL值,一个表允许多个列创建唯一索引

普通索引:基本的索引类型,没有唯一性的限制,允许为NULL值,一个表允许多个列创建普通索引

全文索引:

 9.索引的数据结构

在MYSQL中使用较多的索引有哈希索引和B+数索引。索引的数据结构和具体的存储引擎实现有关,而我们经常使用的InnoDB存储引擎,默认实现索引为:B+数索引。对于哈希索引来说,底层的数据结构就是哈希表,因此绝大多数需求为单条记录等值查询的时候,可以选择哈希索引,查询性能最快;其余大多数场景,建议选择B+数索引

1.B+树索引

MYSQL通过存储引擎获取数据,基本上都是用InnoDB了,按照实现方式分,InnoDB的索引类型目前只有两种,B数索引和哈希索引。B数索引是Mysql数据库中使用最频繁的索引类型,基本所有的存储引擎都支持B树索引。

2.B+树数据结构

(1)从根节点到叶节点所有路径都具有相同的长度

(2)所有数据信息存储在叶子节点,非叶子节点仅作为叶节点的索引存在

(3)叶子节点通过指针连在一起

(4)根节点至少拥有两个子树

(5)每个数节点最多拥有M个子树

(6)每个树节点至少拥有M/2个子树

10.数据库为什么使用B+数而不是B数呢?

  • B+数的叶子节点存储了所有的数据,非叶子节点存储的是比较关键字。而B数所有节点都会存储数据。B+数的叶子节点存在一个指针连接,B树不存在指针连接。B+树所有的数据都存在于叶子节点,那么顺着叶子节点从左往右可以完成对数据的遍历,极大简化了排序操作。
  • B数只适合随机检索,B+数同时支持随机检索和顺序检索
  • B+数空间利用率更高,可减少IO次数,磁盘读写代价更低。一般来说呢,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘中,这样的话,索引查找过程就要产生磁盘IO消耗。B+数的内部节点只是作为索引使用,其内部节点比B数小很多,盘块中可容纳的节点中的关键字数量就更多,一次性读入内存中可查找的关键也多,相对的,IO读写次数也就降低了。
  • B+数的查询效率会更加稳定
  • B+数的叶子节点使用指针顺序连接在一起,只要遍历叶子节点就可以实现对整棵树的遍历
  • 增删改文件时,B+数的效率更高

11.创建索引的原则?索引的设计原则?

  • 为常做查询条件的字段建立索引,where子句中的列,或者连接子句中指定的列
  • 为经常需要排序、分组操作的字段建立索引
  • 更新频繁的字段不适合建立索引
  • 不能有效区分数据的列不适合做索引
  • 对于定义text、image、bit的数据类型不要建立索引
  • 空字段不要建立索引
  • 不要过度索引

 12.什么是聚簇索引?何时使用聚簇索引与非聚簇索引?

聚簇索引:将数据和索引放到一起,索引结构的叶子节点存储了行数据,找到索引也就找到了数据

非聚簇索引:将数据和索引分开存储,索引结构的叶子节点存储仅仅是行数据的地址。