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

devtools/2024/10/21 14:30:35/

为了更深入地了解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文件所需的线性扫描形成鲜明对比。


http://www.ppmy.cn/devtools/5217.html

相关文章

elementuiPlus 中的 el-image 实现全屏展示,放大缩小配置偶尔失效?

问题 elementuiPlus 中的 el-image 实现全屏展示,滚轮失效。 全屏事件的放大缩小,主要是通过配置 zoom-rate , max-scale,min-scale来实现。【我遇到的事件失效的原因是因为我把 zoom-rate设置成了1】 默认值: :zoom-rate"1.2" :…

【网络编程】TCP流套接字编程(TCP实现回显服务器)

一.TCP流套字节相关API. Socket(既能给客户端使用,也能给服务器使用) 构造方法 基本方法: ServerSocket(只能给服务器使用) 构造方法: 基本方法: 二.TCP实现回显服务器. 客户端代码示例: package Demo2;import java.io.IOException; import java.io.InputStream; import j…

Wpf 使用 Prism 实战开发Day20

备忘录功能页面完善以及优化 备忘录功能基本跟前一章节的待办事项差不多一至&#xff0c;就不再做过多的笔述了 一.备忘录功能完整页面源码 MemoView.xaml <UserControl x:Class"MyToDo.Views.MemoView"xmlns"http://schemas.microsoft.com/winfx/2006/xam…

Cisco ACI使用Postman配置交换机-未完待续

先看下不使用脚本的情况下是怎么配置交换机端口的&#xff1f; 例&#xff1a; 有10个交换机接口要开trunk&#xff0c;透传50个vlan&#xff0c; 使用GUI的操作方式为 1 进入EPG -->Static port 2 右键&#xff0c;绑定接口 3 选中node -->指定接口—>指定vlan —>…

Python的pytest框架(4)--参数化测试

在 pytest 测试框架中&#xff0c;参数化测试&#xff08;Parametrized Testing&#xff09;意味着将一个测试用例设计为能够接受不同输入数据&#xff08;参数&#xff09;并分别执行&#xff0c;以验证被测试代码在面对多种情况时的行为是否符合预期。参数化测试的核心理念是…

大厂面试精华面试刷题

1.自定义unshift实现相同效果 2.数组去重 用vs2019来写这种练习题可以更直观的查看代码执行的效果&#xff0c;最后的代码是控制控制台执行完毕后不自动关闭 use strict;let arr [1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10] //1.//查重最简单的方法for循环结合splice从数组中…

Mybatis generate xml 没有被覆盖

添加插件即可 <plugin type"org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin"/>

Docker Container (容器) 常见命令

Docker 容器的生命周期 什么是容器&#xff1f; 通俗地讲&#xff0c;容器是镜像的运行实体。镜像是静态的只读文件&#xff0c;而容器带有运行时需要的可写文件层&#xff0c;并且容器中的进程属于运行状态。即容器运行着真正的应用进程。容 器有初建、运行、停止、暂停和删除…