JAVA面试——数据库(一)

简介: JAVA面试——数据库

19.1.1.存储引擎

19.1.1.1. 概念

数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、査询、 更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同 的存储引擎,还可以获得特定的功能。现在许多不同的数据库管理系统都支持多种不同的数据引 擎。存储引擎主.要有:1. Mylsam , 2. InnoDB, 3. Memory, 4. Archive, 5. Federated

19.1.1.2. InnoDB B+

InnoDB底层存储结构为B+树,B树的每个节点对应innodb的一个page, page大小是固定的, 一般设为16k其中非叶子节点只有键值,叶子节点包含完成数据。


 

适用场景:

1)经常更新的表,适合处理多重并发的更新请求。

2)支持事务。

3)可以从灾难中恢复(通过bin-log日志等)。

4)外键约束。只有他支持外键。

5)支持自动增加列属性auto_increment

19.1.1.3. TokuDB Fractal Tree-节点带数据

TokuDB底层存储结构为Fractal Tree,Fractal Tree的结构与B+树有些类似,在Fractal Tree 中,每一个child指针除了需要指向一个child节点外,还会带有一个Message Buffer,这个 Message Buffer是一个FIFO的队列,用来缓存更新操作

例如,一次插入操作只需要落在某节点的Message Buffer就可以马上返回了,并不需要搜索到叶 子节点。这些缓存的更新会在査询时或后台异步合并应用到对应的节点中。


 

TokuDB在线添加索引不影响读写操作,非常快的写入性能,Fractal-tree在事务实现上有优 势。他主要适用于访问频率不高的数据或历史数据归档。

19.1.1.4. MylASM

MyIASMMySQL默认的引擎,但是它没有提供对数据库事务的支持,也不支持行级锁和外键, 因此当INSERT(插入)或UPDATE(更新)数据时即写操作需要锁定整个表,效率便会低一些。

ISAM执行读取操作的速度很快,而且不占用大量的内存和存储资源。在设计之初就预想数据组织 成有固定长度的记录,按顺序存储的。---ISAM是一种静态索引结构。

缺点是它不支持事务处理

19.1.1.5. Memory

Memory (也叫HEAP堆内存:使用存在内存中的内容来创建表。每个MEMORY表只实际对应 一个磁盘文件。MEMORY类型的表访问非常得快,因为它的数据是放在内存中的,并且默认使用 HASH索引。但是一旦服务关闭,表中的数据就会丟失掉。Memory同时支持散列索引和B树索 引,B树索引可以使用部分査询和通配査询,也可以使用<,>和>=等操作符方便数据挖掘,散列索 引相等的比较快但是对于范围的比较慢很多。

19.1.2. 索引

索引Index是帮助MySQL高效获取数据的数据结构。常见的査询算法,顺序査找,二分査找,二 叉排序树査找,哈希散列法,分块査找,平衡多路搜索树BB-tree)

19.1.2.1.常见索引原则有

1. 选择唯一性索引

1. 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录。

2.  为经常需要排序、分组和联合操作的字段建立索引:

3. 为常作为査询条件的字段建立索引。

4. 限制索引的数目:

越多的索引,会使更新表变得很浪费时间。

尽量使用数据量少的索引

6. 如果索引的值很长,那么査询的速度会受到影响。

尽量使用前缀来索引

7. 如果索引字段的值很长,最好使用值的前缀来索引。

7.删除不再使用或者很少使用的索引

8 .最左前缀匹配原则,非常重要的原则。

10 .尽量选择区分度高的列作为索引

区分度的公式是表示字段不重复的比例

11 .索引列不能参与计算,保持列“干净”:带函数的査询不参与索引。

12 .尽量的扩展索引,不要新建索引。

目录
相关文章
|
6天前
|
SQL Java 数据库连接
17:数据库连接池与Servlet整合-Java Web
17:数据库连接池与Servlet整合-Java Web
18 3
|
7天前
|
Java 关系型数据库 测试技术
Java代码一键生成数据库文档(案例详解)
Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。
|
9天前
|
Java 关系型数据库 MySQL
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
【JDBC编程】基于MySql的Java应用程序中访问数据库与交互数据的技术
|
9天前
|
Java 关系型数据库 MySQL
Java基础教程(20)-Java连接mysql数据库CURD
【4月更文挑战第19天】MySQL是流行的关系型数据库管理系统,支持SQL语法。在IDEA中加载jar包到项目类路径:右击项目,选择“Open Module Settings”,添加库文件。使用JDBC连接MySQL,首先下载JDBC驱动,然后通过`Class.forName()`加载驱动,`DriverManager.getConnection()`建立连接。执行CRUD操作,例如创建表、插入数据和查询,使用`Statement`或`PreparedStatement`,并确保正确关闭数据库资源。
|
9天前
|
Java 数据库
Java实现超市管理系统(含数据库)
Java实现超市管理系统(含数据库)
|
11天前
|
Java
【JAVA面试题】static的作用是什么?详细介绍
【JAVA面试题】static的作用是什么?详细介绍
|
11天前
|
Java
【JAVA面试题】final关键字的作用有哪些
【JAVA面试题】final关键字的作用有哪些
|
11天前
|
JavaScript 前端开发 Java
【JAVA面试题】什么是引用传递?什么是值传递?
【JAVA面试题】什么是引用传递?什么是值传递?
|
11天前
|
安全 Java
【JAVA面试题】什么是对象锁?什么是类锁?
【JAVA面试题】什么是对象锁?什么是类锁?
|
11天前
|
存储 自然语言处理 Java
【JAVA面试题】什么是代码单元?什么是码点?
【JAVA面试题】什么是代码单元?什么是码点?