【数据库】数据库为什么比电子表格快

发布于:2024-04-24 ⋅ 阅读:(29) ⋅ 点赞:(0)

为了更深入地了解SQL数据库用于加速查询的特定算法和机制,让我们关注索引和查询优化。与在CSV等平面文件中进行线性搜索相比,这些基本方面使数据库中的查询速度更快。

1。索引

数据库中的索引有点类似于书籍中的索引,它允许你快速定位特定的信息,而无需阅读整本书。下面是它在数据库中的工作方式:

索引类型

  • B-tree(平衡树):SQL数据库中用于通用查询的最常见索引类型。它对于范围查询(相等查询和范围查询)特别有效。
  • 哈希索引:最适合比较相等。它使用散列表直接将键(您正在查询的值)映射到它们在数据库中的位置。
  • 位图索引:适用于列数据基数较低的场景(即,只有少量不同的值,例如布尔字段中的TRUE/FALSE)。
b树索引的工作原理
  • 结构:b树索引创建一个树结构,其中每个节点包含按特定顺序排序的键。节点中的每个键都指向一条数据库记录或B-tree中的一个较低级别的节点。
  • 查询:当你执行查询时,数据库引擎从b树的根节点开始,并在树的每个节点上根据键值进行决策,直到它到达叶子节点,叶子节点包含指向磁盘中实际数据记录的指针。
  • 效率:这种结构允许数据库显著减少磁盘访问次数。例如,与读取CSV文件中的每个条目相比,在有100万个条目的数据库中查找一条记录可能只需要三到四个步骤。

2。查询优化

SQL数据库使用高级查询优化算法来确定执行查询的最有效方法。下面是所发生事情的简化视图:

####查询优化器

  • 生成计划:优化器分析SQL查询并生成多种可能执行查询的策略。这些策略被表示为不同的“查询计划”。
  • 成本估算:每个计划都是根据其资源(如CPU、内存、I/O)方面的“成本”来评估的。成本模型估计执行计划需要多长时间。
  • 计划选择:优化器选择具有最低估计成本的查询计划。

执行

  • 执行引擎:一旦选择了最佳计划,数据库执行引擎将执行该计划。在执行过程中,引擎可能会使用索引、连接多个表、排序数据或应用聚合——所有这些都是基于底层数据和数据库结构进行优化的。

实际例子

假设你有一张数据库表users,其中包含idnameemail列,并且你经常通过email进行查询。你可以在email列上创建一个b树索引。当你查询`SELECT * FROM users WHERE email = ‘user@example.com’; ',数据库:

  1. 使用B-tree索引快速定位email匹配user@example.com的记录。
  2. 只访问存储这些记录的相关磁盘页,跳过所有其他页。
  3. 返回结果比扫描每一行快得多。

通过使用这些复杂的机制,SQL数据库提供了健壮、高效和快速的数据检索功能,使其成为处理复杂查询和大型数据集的理想选择,与CSV文件所需的线性扫描形成鲜明对比。