数据库
- 数据库中,datetime和timestamp区别?
Datetime类型表示时间,可以精确到秒或更小精度,存储1000-9999年的时间
Timestamp表示时间,存储1970年1月1日经过的秒数(也叫UNIX时间戳),存储1970到2038年时间。
区别:datetime使用固定长度,不受时区的变化,存储的值可以直接是日期和时间而timestamp相当于UNIX时间戳的秒数,与时区有关,在插入或查询时会自动转换为当前的时区,所以使用这种类型可能会有所差异。
- char与varchar的区别?
存储方式:char是固定长度的字符串类型,在存储时自动补齐空白字符至指定长度,varchar是一种可变字符串类型,在存储时不会自动填充空白字符,在实际使用的字符长度加上一些额外的字节用于存储长度信息。
存储空间:char是固定长度,存储空间固定,varchar可变长度,存储空间根据实际存储的字符串进行动态调整,可以节省存储空间。
- Count(*)与count(列名)区别,与sum的区别?
求和用累加sum(),求行用count
Count(*)包含所有列,在统计结果的时候不会忽略值为null的
Count(列名)只包含列名那一项,会忽略列表为空的计数
- 数据库的范式设计
就是一种规范化的数据库的设计方法,目的是减少数据冗余,提高数据的一致性和避免更新数据异常。
1NF:确保数据库中每个属性都是原子性,不可再分。也就是每个属性的每个值都是不可再分,这样可以消除重复组和重复数据。
2NF:在第一范式基础上,确保非主键完全依赖主键。
3NF: 在满足第二范式基础上,确保非主键属于之间没有传递关系。
- 数据库设计过程
① 范式设计与反范式设计:范式的表减少了数据冗余;反范式通过冗余数据提高性能,减少表的关联。
② 扩展性设计:考虑业务场景一对一,一对多
③ 数据库约束:非空,唯一
④ 数据库访问权限界定
⑤ 表字段创建:考虑添加创建时间和修改时间
- PG支持的索引?
索引是一种数据结构,加快数据库查询和检索效率。PG支持多种索引:B-tree,Hash
B-tree:最常用的一种索引,可以有效处理范围查询和排序操作。
哈希索引适用于等值查询
GiST:适合复杂搜索,比如全文搜索。但是全文搜索一般是在文本数据中进行高效搜索和匹配的技术。更推荐使用ES的倒排索引:通过关键词和词与文章的映射关系来锁定位置。
- Mysql存储引擎默认是innodb,PG是存储模型的概念来描述其数据存储方式,PG是开源的对象-关系数据库系统。
PG的存储引擎负责数据的存储,检索和管理,它使用的核心技术MVCC模型
工作原理:多版本并发控制,允许在没有明显锁定的情况进行并发读写。
版本控制:每当数据被修改,pg不会直接重写数据,而是创建一个新的版本,旧版数据将被保留,直到没有事务再引用它。
读操作:不需要锁定,每个事务都有自己的版本,保证多并发不会被阻塞。
写操作:不直接锁定数据。如果两个事务试图修改同一条数据,只有第一个事务会成功,其他事务会收到一个错误,并需要重新提交。
存储数据的结构:称为”堆”(与内存的堆不同)。堆文件包含了表的所有数据,它不按照特定顺序存储。
数据页:数据存储在固定大小的页中,通常8kb。
行版本:每个数据行都有一个或多个版本,取决于它被修改的次数,MVCC保证每个事务都能看到正确的版本。
- 查询优化?
① 使用EXPLAIN了解查询的执行计划,找出潜在的瓶颈。
② 索引选择:使用正确的索引
③ 查询重写:有时,简单的重写查询可以获得更好的性能。
- PG的堆结构和内存的堆有一些不同之处?
① PG的堆:指用于存储表结构的物理结构,pg将每个表的数据存储为一个堆结构,数据以行的形式存储在磁盘上。每个表都有一个对应的堆文件,用于持久存储数据。
② 内存的堆:是在计算机内存中动态分配的一块区域。用于存储程序运行时使用的动态数据,如变量,对象,数据结构等。允许程序在运行过程中分配和释放内存。

浙公网安备 33010602011771号