数据库学习——几大重点(二)
如何建立数据库视图
什么是数据库视图
是一种数据库对象,基于数据库表的查询结果。视图本身不包含数据,它是一个虚拟表,显示的数据来自一个或多个表。可以在视图上执行CRUD操作,实际上数据库也会执行对应的sql语句,反之同理。
主要特点&作用
- 简化复杂的SQL操作:如果经常需要执行一个复杂的查询,可以通过创建一个视图来简化这个操作。这样,用户就可以像查询一个普通表一样查询这个视图,而不需要每次都写复杂的SQL语句。
- 保护数据:通过视图,可以限制用户访问表中的特定数据。例如,可以创建一个只显示某些列的视图,从而隐藏表中的其他列。
- 数据独立性:如果表结构发生变化,只需修改视图定义,而不需要更改基于视图的应用程序。
- 逻辑数据组织:视图可以用来表示数据的逻辑组织和关系,即使这些关系在物理存储上并不存在。
数据库索引
什么是索引
是数据库管理系统中用于加快数据检索速度的一种数据结构。它们在数据库表的一列或多列上创建,以提高查询性能。索引类似于图书的目录,它帮助数据库快速定位表中的数据,而不需要扫描整个表。
主要特点&优势
- 提高查询效率:索引可以大大加快数据检索速度,尤其是在大型数据库中。
- 优化排序和分组操作:索引有助于快速完成排序和分组查询。
- 支持唯一性约束:唯一索引确保表中每一行数据的唯一性。
- 加速表连接:在使用JOIN操作连接多个表时,索引可以提高效率。
缺点&限制
- 增加写操作成本:每当表中的数据被插入、删除或更新时,索引也需要被更新。这会增加写操作的成本。
- 占用额外存储空间:索引需要占用数据库中的存储空间。
- 设计和维护成本:索引需要根据数据库的使用模式进行精心设计和维护。
常见索引类型
B树索引(B-Tree Index)
原理:B树是一种平衡多路查找树。在B树索引中,每个节点包含多个键值及指向子节点的指针。B树通过维持树的平衡性(所有叶子节点都在同一层级),确保了即使在大量数据中也能快速进行查找、插入和删除操作。在查找数据时,从根节点开始,通过比较键值和查询条件,逐级向下遍历至叶子节点,找到对应数据的位置。
例子:假设有一个按照员工ID排序的员工数据库,创建一个B树索引可以快速定位特定员工ID的记录。
哈希索引(Hash Index):
原理:哈希索引使用哈希表实现。它通过一个哈希函数将键值(例如记录的某个字段)转换为哈希码,并将数据存储在哈希表中对应哈希码的位置。在查找数据时,同样使用哈希函数计算查询条件的哈希码,然后直接访问对应的存储位置。
例子:在一个以书籍编号为键的图书数据库中,哈希索引可以快速定位特定编号的图书记录。
位图索引(Bitmap Index):
原理:位图索引为表中的每一个不同值维护一个位图。每个位图中的每一位对应一条记录,表示该记录是否拥有该值。位图索引适用于列值的基数较低(即不同值不多)的情况。由于位操作(如AND, OR)的效率很高,位图索引在某些类型的查询中非常高效。
例子:在一个有性别列的员工数据库中,可以为性别创建位图索引,其中一个位图表示所有男性员工,另一个表示所有女性员工。
全文索引(Full-Text Index):
原理:全文索引通常使用倒排索引实现。在倒排索引中,索引的每一项是文档中的一个词,每个词对应一个包含该词的所有文档列表。这种结构非常适合用于搜索包含特定词的文档。
例子:在一个博客平台的数据库中,全文索引可以帮助快速找到包含特定关键词的所有博客文章。
B+树
什么是B+树
自平衡的树数据结构,维护排序的数据,并允许搜索、顺序访问、插入和删除操作。它是B树(B-树)的一种变体。
结构特点
- 所有叶子节点在同一层:B+树的所有叶子节点都位于同一层,并且通过指针相连,这为顺序遍历提供了便利。
- 叶子节点存储所有键和数据:与B树不同,B+树的叶子节点存储了所有键和数据。非叶子节点只存储键值,用于指导搜索。
- 非叶子节点作为索引部分:非叶子节点类似于索引,指向子节点,这些键在子节点中也会出现。
- 高扇出:由于非叶子节点不直接存储数据,B+树的扇出(即节点的子节点数)比B树更高,这减少了树的高度。
与B树的比较
- 数据存储:B树的每个节点存储键和数据,而B+树只有叶子节点存储数据。
- 扫描效率:B+树通过叶子节点的链表提供更高效的范围查询,因为它可以简单地遍历叶子节点链表。
- 空间利用率:B+树的非叶子节点不存储数据,可以有更多的键,降低了树的高度。