1.17.1. DB数据库

数据库

1、MySQL

2、Oracle

3、数据库操作框架

4、数据库中间件

5、轻量级数据库

6、其他数据库工具

DB-Engines Ranking
墨天轮中国数据库流行度排行
数据库排行榜


1.17.1.1. MySQL

DML、DDL、DCL的区别 数据库的概念:库,用户,等 SQL列约束、主键约束、外键约束
SQL唯一约束、主键、外键
三范式:1NF、2NF、3NF 锁表原因及解决思路
JDBC接口
使用PreparedStatement预编译的好处
SQL关键字:DISTINCT、Where(AND/OR、IN、BETWEEN、LIKE)GROUP BY(HAVING)、ORDER BY 数据库优化 SQL优化 索引的种类、数据结构、时间复杂度、实现原理 MySQL自适应索引(Adaptive hash index, AHI)实现解析 游标(cursor) 数据库中事务的四大特性(ACID)

1、DML、DDL、DCL的区别
DDL(data definition language)数据库定义语言:CREATE、ALTER、DROP等
DCL(Data Control Language)数据库控制语言:包括(grant,deny,revoke等)语句
DML(data manipulation language)数据操纵语言:常用到的 SELECT、UPDATE、INSERT、DELETE。

SQL唯一约束、主键、外键
三范式:
第一范式(1NF):定义所需要的数据项、确保有数据没有重复的组、确保有一个主键、
第二范式(2NF):满足所有1NF的规则,必须有任意列不依赖主键关系
第三范式(3NF):满足第二范式 、所有非主字段都是依赖于主键

第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。
第二范式:在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。也就是一类,比如订单信息和客户信息分成两个表
第三范式需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

2、数据库优化 数据库优化套路
分库分表、优化SQL语句、执行计划和Hint(提示)

数据库优化:
1) SQL语句及索引的优化
2) 数据库表结构的优化
数据库架构扩展:主从复制与读写分离、增加缓存、分库、分表、分区,开启慢查询日志,
3) 系统配置的优化
4) 硬件优化

3、SQL优化:执行计划和Hint:EXPLAIN 或 EXPLAIN PLAN FOR 、/+ all_rows /

查看执行计划:mysql:EXPLAIN 或者 oracle:EXPLAIN PLAN FOR
访问数据扫描方式:全表扫描、通过ROWID的扫描、索引扫描(索引唯一扫描、索引范围扫描、索引全扫描、索引快速扫描)
表之间连接:四种
SQL优化:执行计划和Hint(提示)、SQL语句优化
SQL语句优化:优化语句使用索引、加Hint(提示)

SQL优化 一个 SQL 语句的具体执行过程,比如会怎么利用索引,怎么优化之类的

什么样的sql不走索引:where条件上索引列有计算、比较等操作,%%通配符,使用or关键字等等 检查SQL是否使用了索引:用explain 来执行检验sql
mysql:key列显示MySQL实际决定使用的键(索引) SQL语句优化:避免全表扫描
MySQL行级锁、表级锁、页级锁的优化

4、索引的种类、数据结构、时间复杂度、实现原理 索引的作用,结构,为什么可以加快查询,缺点 占用空间,增删改变慢

数据库中主键与索引的区别 加索引能使查询变快,加索引后会使写入、修改、删除变慢,占用存储空间 索引的实现使用的数据结构:B-tree 或者 B+tree(局部性原理、磁盘预读、) 由于B+Tree内节点去掉了data域,因此可以拥有更大的出度,从而拥有更好的性能。
数据库系统的设计者巧妙利用了磁盘预读原理,将一个节点的大小设为等于一个页,这样每个节点只需要一次I/O就可以完全载入。为了达到这个目的,在实际实现B-Tree还需要使用如下技巧:每次新建节点时,直接申请一个页的空间,这样就保证一个节点物理上也存储在一个页里,加之计算机存储分配都是按页对齐的,就实现了一个node只需一次I/O。

索引的种类:唯一索引、聚集索引、非聚集索引、覆盖索引 索引查询的流程:非聚集索引和聚集索引的区别在于, 通过聚集索引可以查到需要查找的数据, 而通过非聚集索引可以查到记录对应的主键值 , 再使用主键的值通过聚集索引查找到需要的数据
索引数据结构设相关的计算机原理:磁盘预读原理 和 B+树 B树的搜索复杂度为O(h)=O(logdN),所以树的出度d越大,深度h就越小,I/O的次数就越少。B+Tree恰恰可以增加出度d的宽度,因为每个节点大小为一个页大小,所以出度的上限取决于节点内key和data的大小

索引类型:
a、普通索引:没有限制
b、唯一索引:索引列的值必须唯一,但允许有空值。
c、主键索引:特殊的唯一索引,不允许有空值。
d、组合索引:最左前缀。
1):查询条件中出现联合索引第一列,或者全部,则能利用联合索引.
2)条件列中只要条件相连在一起,以本文例子来说就是:
last_name=’1′ and first_name=’1′
与first_name=’1′ and last_name=’1′,无论前后,都会利用上联合索引.
3)查询条件中没有出现联合索引的第一列,而出现联合索引的第二列,或者第三列,都不会利用联合索引查询.复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的
e、全文索引

索引的坏处:虽然大大提高了查询速度,但是会降低表的更新速度,例如insert、delete、update时,不仅要更新表,还要更新索引文件。

数据库中事务的定义,什么是数据库事务 数据库中事务的四大特性(ACID) 怎么实现ACID:实现ACID的核心技术是并发控制和日志技术 并发控制:2PL、OCC、MVCC:保证并发操作的正确性 日志:Redo/Undo,WAL协议:保证故障场景下可恢复

数据库事务定义:一致性、隔离性 事务(Transaction)的4大特性ACID ACID 原子性、一致性、隔离性(Isolation)、持久性 事务(Transaction)的隔离级别:Read uncommitted、Read committed、Repeatable read、Serializable: SQL标准定义了4种事务隔离级别:读未提交,读已提交,可重复读,串行化
事物隔离级别的实现原理:共享锁、独占锁、行级锁、表级锁
事务隔离解决问题:脏读、不可重复读、幻读

read-uncommited 读未提交,别人修改了未提交就能看得到。会产生脏读
read-commited 读提交,默认的就是这个。 会产生读取旧数据,
repeatable-read 可重复读。会产生幻读,就是突然蹦出来的数据。读取数据的事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。
serializable 可串行化,强制事务串行执行。但是性能低下。

Select、where、order by、COUNT、HAVING 、

4、redis怎么防止内存穿透,怎么做到缓存和数据库一致

DB数据库深度分页:覆盖索引、主键索引+join、倒序排列、缓存若干页、业务不允许查太多页

数据库,innobd,隔离级别,行级锁

JDBC规范提供的接口和类
Statement、PreparedStatement、CallableStatement区别

12、mybatis中的 ${param}与#{param}区别

13、mysql主从复制
主从好处:数据安全备份、读写分离、业务数据分库存储
主从原理:主库的binlog、position输出线程、从库的I/O线程接收binlog、position线程 和 从库的SQL线程

mysql主从复制存在的问题:
主库宕机后,数据可能丢失
从库只有一个sql Thread,主库写压力大,复制很可能延时

解决方法:
半同步复制—解决数据丢失的问题
并行复制—-解决从库复制延迟的问题

mysql数据库底层的排序机制? sort page是怎么工作的?

1、数据库分页重复和分页实现
使用分页SQL的时候,数据如果是动态变化的,就会导致分页查询到重复数据
Oracle分页查询的三种方法
2、数据库深度分页优化
3、分库分表如何做到永不迁移数据和避免热点
1、数据库分库分表原因、策略、带来的问题、解决
2、数据库分布式事务解决:JTA的XA协议、二阶段提交(2PC、3PC)、柔性事务、最终一致性事务(消息)
3、spring事务(Transaction)的七种事务传播行为及五种隔离级别

数据库(database)、表(table)、视图(view)、索引(index)、序列(sequence)、
表连接方式:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN、SELF JOIN、CARTESIAN JOIN(笛卡尔乘积)、UNION ALL、UNION

框架:mybatis、hibernate

数据库问题:
索引分类,有什么用,好处、有什么优缺点,为什么可以加快查询,怎么检查一个SQL是否走索引, 索引使用条件、判断是否使用、不使用的情况 聚集索引、非聚集索引、覆盖索引(复合索引或者多字段索引查询),不加索引(全表扫描)
B-tree 或者 B+tree
占用空间,增删改变慢

数据库:范式、索引、优化、锁、oracle、mysql、mybatis

数据库的锁:表级锁、页级锁、行级锁,悲观锁、乐观锁
查找算法分类:

mysql的主从是怎么实现的
mysql当表达到一定数量,查询变慢,为什么?感觉是数据库优化的问题,建索引、分库分表、主从读写分离

mysql主从同步基于什么来做的?
mysql为什么一张表到了一定量查询会变慢?

MySQL有三种锁的级别:页级、表级、行级。


1.17.1.2. Oracle

Oracle
JDBC 链接oracle的三种URL写法:SID方式 、ServerName方式、RAC方式

SID是数据库实例的名字
Service_name参数,该参数对应一个数据库,而不是一个实例
一个数据库对应多个实例(SID)
一个数据库可以对应多个Service_name

oracle的sid与实例
1.SID:对应着实例,一个数据库可以有多个实例(如RAC),SID是用来标识这个数据库内部每个实例的名字。
2.SERVICE_NAME:是这个数据库对外宣称的名字,对应着数据库。

Oracle序列的创建

Oracle 物化视图 说明 https://blog.csdn.net/tianlesoftware/article/details/4713553


1.17.1.3. 数据库操作框架


1.17.1.4. 数据库中间件


1.17.1.5. 轻量级数据库


1.17.1.6. 其他数据库工具


数据库:数据源、druid、h2、sqlite、yugong、,mybatis、liquibase、jooq、sharding-sphere、thinkjd

Copyright © 2018-2021 | Distributed under CC BY 4.0 | Peter all right reserved,powered by Gitbook Updated at 2023-03-25 00:08:43

results matching ""

    No results matching ""