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 .尽量的扩展索引,不要新建索引。

目录
相关文章
|
1月前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
60 5
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
73 2
|
1月前
|
JSON Java 关系型数据库
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
在Java中,使用mybatis-plus更新实体类对象到mysql,其中一个字段对应数据库中json数据类型,更新时报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
49 4
Java更新数据库报错:Data truncation: Cannot create a JSON value from a string with CHARACTER SET 'binary'.
|
1月前
|
架构师 数据库
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
数据库乐观锁是必知必会的技术栈,也是大厂面试高频,十分重要,本文解析数据库乐观锁。关注【mikechen的互联网架构】,10年+BAT架构经验分享。
大厂面试高频:数据库乐观锁的实现原理、以及应用场景
|
23天前
|
Java 程序员
Java社招面试题:& 和 && 的区别,HR的套路险些让我翻车!
小米,29岁程序员,分享了一次面试经历,详细解析了Java中&和&&的区别及应用场景,展示了扎实的基础知识和良好的应变能力,最终成功获得Offer。
62 14
|
1月前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
1月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
|
1月前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
28天前
|
Java 编译器 程序员
Java面试高频题:用最优解法算出2乘以8!
本文探讨了面试中一个看似简单的数学问题——如何高效计算2×8。从直接使用乘法、位运算优化、编译器优化、加法实现到大整数场景下的处理,全面解析了不同方法的原理和适用场景,帮助读者深入理解计算效率优化的重要性。
32 6
|
1月前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
59 4