面试题答案
一键面试SQLite页结构节省空间特点
- 固定页大小:SQLite使用固定大小的页,常见页大小有512字节、1024字节、2048字节、4096字节、8192字节和16384字节。固定页大小便于管理和提高空间利用率,减少因可变页大小带来的空间碎片问题。
- 页头紧凑:页头包含了页类型、页号、数据库文件格式版本等关键元数据信息,这些信息以紧凑的二进制格式存储,占用空间少。例如,页类型通常用一个字节表示不同的页类型(如数据页、索引页等)。
- 行溢出处理:当一行数据过大无法完全存储在页内时,SQLite采用行溢出机制。数据的一部分存储在主页,溢出部分存储在溢出页,这样既保证了页内数据结构的相对紧凑,又能处理大数据行的存储问题。
SQLite表结构节省空间特点
- 无额外开销的表元数据:SQLite的表元数据直接存储在数据库文件的特定页中(如
sqlite_master
表),没有像一些大型数据库那样为表元数据设立专门复杂的目录结构,减少了额外的空间开销。 - 列存储优化:SQLite根据列的数据类型存储数据。对于整数类型,会根据其范围选择合适大小的存储方式,如1字节、2字节、3字节、4字节、6字节或8字节来存储,避免了固定使用大字节数存储小范围整数造成的空间浪费。对于字符串类型,采用动态长度存储,只记录实际字符串长度,而不是固定分配大的空间。
- 索引紧凑设计:SQLite的B - 树索引结构紧凑。索引节点只存储必要的键值和指针信息,并且通过对键值的高效编码方式(如前缀压缩等),减少索引存储所占用的空间,从而间接节省了表整体的存储空间,因为索引也是表结构的一部分,良好的索引设计能提升表访问效率并节省空间。