数据库

  1. 数据库中,datetimetimestamp区别?

Datetime类型表示时间,可以精确到秒或更小精度,存储1000-9999年的时间

Timestamp表示时间,存储197011日经过的秒数(也叫UNIX时间戳),存储19702038年时间。

区别:datetime使用固定长度,不受时区的变化,存储的值可以直接是日期和时间而timestamp相当于UNIX时间戳的秒数,与时区有关,在插入或查询时会自动转换为当前的时区,所以使用这种类型可能会有所差异。

  1. charvarchar的区别?

存储方式:char是固定长度的字符串类型,在存储时自动补齐空白字符至指定长度,varchar是一种可变字符串类型,在存储时不会自动填充空白字符,在实际使用的字符长度加上一些额外的字节用于存储长度信息。

存储空间:char是固定长度,存储空间固定,varchar可变长度,存储空间根据实际存储的字符串进行动态调整,可以节省存储空间。

  1. Count(*)count(列名)区别,与sum的区别?

求和用累加sum(),求行用count

Count(*)包含所有列,在统计结果的时候不会忽略值为null

Count(列名)只包含列名那一项,会忽略列表为空的计数

  1. 数据库的范式设计

就是一种规范化的数据库的设计方法,目的是减少数据冗余,提高数据的一致性和避免更新数据异常。

1NF:确保数据库中每个属性都是原子性,不可再分。也就是每个属性的每个值都是不可再分,这样可以消除重复组和重复数据。

2NF:在第一范式基础上,确保非主键完全依赖主键。

3NF: 在满足第二范式基础上,确保非主键属于之间没有传递关系。

  1. 数据库设计过程

① 范式设计与反范式设计:范式的表减少了数据冗余;反范式通过冗余数据提高性能,减少表的关联。

② 扩展性设计:考虑业务场景一对一,一对多

③ 数据库约束:非空,唯一

④ 数据库访问权限界定

⑤ 表字段创建:考虑添加创建时间和修改时间

  1. PG支持的索引?

索引是一种数据结构,加快数据库查询和检索效率。PG支持多种索引:B-treeHash

B-tree:最常用的一种索引,可以有效处理范围查询和排序操作。

哈希索引适用于等值查询

GiST:适合复杂搜索,比如全文搜索。但是全文搜索一般是在文本数据中进行高效搜索和匹配的技术。更推荐使用ES的倒排索引:通过关键词和词与文章的映射关系来锁定位置。

  1. Mysql存储引擎默认是innodbPG是存储模型的概念来描述其数据存储方式,PG是开源的对象-关系数据库系统。

PG的存储引擎负责数据的存储,检索和管理,它使用的核心技术MVCC模型

工作原理:多版本并发控制,允许在没有明显锁定的情况进行并发读写。

版本控制:每当数据被修改,pg不会直接重写数据,而是创建一个新的版本,旧版数据将被保留,直到没有事务再引用它。

读操作:不需要锁定,每个事务都有自己的版本,保证多并发不会被阻塞。

写操作:不直接锁定数据。如果两个事务试图修改同一条数据,只有第一个事务会成功,其他事务会收到一个错误,并需要重新提交。

 

存储数据的结构:称为”堆”(与内存的堆不同)。堆文件包含了表的所有数据,它不按照特定顺序存储。

数据页:数据存储在固定大小的页中,通常8kb

行版本:每个数据行都有一个或多个版本,取决于它被修改的次数,MVCC保证每个事务都能看到正确的版本。

 

  1. 查询优化?

① 使用EXPLAIN了解查询的执行计划,找出潜在的瓶颈。

② 索引选择:使用正确的索引

③ 查询重写:有时,简单的重写查询可以获得更好的性能。

 

  1. PG的堆结构和内存的堆有一些不同之处?

① PG的堆:指用于存储表结构的物理结构,pg将每个表的数据存储为一个堆结构,数据以行的形式存储在磁盘上。每个表都有一个对应的堆文件,用于持久存储数据。

② 内存的堆:是在计算机内存中动态分配的一块区域。用于存储程序运行时使用的动态数据,如变量,对象,数据结构等。允许程序在运行过程中分配和释放内存。

 

posted @ 2023-09-18 15:55  饮冰而行  阅读(26)  评论(0)    收藏  举报