标签:VBA 下面的示例搜索工作簿中除工作表“汇总表”外的多个工作表中的数据,将满足条件的数据所在行复制到指定工作表。...FirstAddress As String Dim WhatFor As String Dim c As Range Dim ws As Worksheet WhatFor = InputBox("搜索什么数据..., "搜索条件") If WhatFor = Empty Then Exit Sub For Each ws In Worksheets If ws.Name "汇总表" Then...FirstAddress End If End With End If Next ws Set c = Nothing End Sub 具体讲,运行代码后,将弹出一个信息框,要求输入要搜索的数据...,然后在工作簿中除工作表“汇总表”外的其他工作表的第7列搜索这个数据,如果匹配,接着再判断匹配行的第6列的单元格中的数值是否大于0,如果大于0则将该行复制到工作表“汇总表”中。
但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态。这没办法用数组实现。但有了栈,这就变得非常方便了。...一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。...图的类型 • 无向图 • 有向图 在程序语言中,图可以用两种形式表示: • 邻接矩阵 • 邻接表 常见图遍历算法 • 广度优先搜索 • 深度优先搜索 面试中关于图的常见问题 •...面试中关于树结构的常见问题 • 求二叉树的高度 • 在二叉搜索树中查找第k个最大值 • 查找与根节点距离k的节点 • 在二叉树中查找给定节点的祖先节点 字典树 字典树,也称为...它能够提供快速检索,主要用于搜索字典中的单词,在搜索引擎中自动提供建议,甚至被用于IP的路由。
中,表都是根据主键顺序以索引的形式存放的,这种存储方式的表称为索引组织表(IOT),InnoDB使用B+树索引模型,数据都是存储在B+树中的。...表中R1~R5的(ID,k)值分别为(100,1)、(200,2)、(300,3)、(500,5)、(600,6),每一个索引在InnoDB里面对应一棵B+树,两棵树的简意示意图如下: 2.2 主键索引和普通索引的区别...* from T where k=5,即普通索引查询方式,则需要先搜索k索引树,得到ID的值为500,再到ID索引树搜索一次,这个过程称为回表!...type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL。 possible_keys:显示可能应用在这张表中的索引。...eq_ref: 在连接中,MySQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用。
二、数据库的工作流程 在收到一个查询的时候,Mysql的架构中的各个组件是如此工作的: ? 客户端同数据库服务层建立TCP连接,连接管理模块会建立连接,并请求一个连接线程。...获取数据后返回给客户端,关闭连接,释放连接线程,过程结束。 三、数据库索引的原理 在整个过程中,最容易称为瓶颈点的是数据的读写,往往意味着要顺序或者随机读写磁盘,而读写磁盘的速度往往是比较慢的。...,但是记录中有的是聚簇索引的ID,所以还需要查找一次聚簇索引的B+树,找到真正的表中的记录,然后在记录中,将C,D读取出来。...,因而第二列相同的,可以分布在不同的节点上,没办法快速定位。...为什么OR要改成IN,或者使用Union OR查询条件的优化往往比较难找到最佳的路径,尤其是OR的条件比较多的时候,尤其如此,对于同一个字段,使用IN就好一些,数据库会对IN里面的条件进行排序,并统一通过二分搜索的方法处理
但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态(当然,它会受限于一定的数量)。这没办法用数组实现。但有了栈,这就变得非常方便了。...一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。...图的类型 无向图 有向图 在程序语言中,图可以用两种形式表示: 邻接矩阵 邻接表 常见图遍历算法 广度优先搜索 深度优先搜索 面试中关于图的常见问题: 实现广度和深度优先搜索 检查图是否为树 计算图的边数...面试中关于树结构的常见问题: 求二叉树的高度 在二叉搜索树中查找第k个最大值 查找与根节点距离k的节点 在二叉树中查找给定节点的祖先节点 字典树(Trie) 字典树,也称为“前缀树”,是一种特殊的树状数据结构...面试中关于字典树的常见问题: 计算字典树中的总单词数 打印存储在字典树中的所有单词 使用字典树对数组的元素进行排序 使用字典树从字典中形成单词 构建T9字典(字典树+ DFS ) 散列表(哈希表) 哈希法
但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态(当然,它会受限于一定的数量)。这没办法用数组实现。但有了栈,这就变得非常方便了。...一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。...图的类型 无向图 有向图 在程序语言中,图可以用两种形式表示: 邻接矩阵 邻接表 常见图遍历算法 广度优先搜索 深度优先搜索 面试中关于图的常见问题 实现广度和深度优先搜索 检查图是否为树 计算图的边数...面试中关于树结构的常见问题: 求二叉树的高度 在二叉搜索树中查找第k个最大值 查找与根节点距离k的节点 在二叉树中查找给定节点的祖先节点 字典树(Trie) 字典树,也称为“前缀树”,是一种特殊的树状数据结构...面试中关于字典树的常见问题 计算字典树中的总单词数 打印存储在字典树中的所有单词 使用字典树对数组的元素进行排序 使用字典树从字典中形成单词 构建T9字典(字典树+ DFS ) 哈希表 哈希法(Hashing
,支持高效的增,删,查,并支持区间搜索呢?...如上图在level1层的链表是我们维护的有序序列,但单纯的链表虽然插入和删除可以做到O(1)级别的复杂度,但查询时间复杂度为O(N),因为不像数组一样可以通过二分法搜索,那么有没有办法支持快速查询,其实是有的如上图...在最顶级的索引,一直到最低级的链表,整个搜索过程其实有点类似在不断跳跃,因此命名为跳跃表(Skip List); 此外刚在说理想情况下,每2个节点提取一个,但实际操作中并不是按照这种方式来的,因为随着数据通过逐层比较的大量插入并下沉到最底级...,跳跃表作为一种动态的数据结构,其综合性能和红黑树一样高效并支持范围检索,能做到这一点的目前的数据结构里面还有B+树,B+树的实现其实与跳跃表的结构比较类似,但B+树是通过树的方式组织的索引,不夸张的说...,如果不考虑内存的占用情况,那么跳跃表是完全也可以替代B+树并实现B+树索引的所有功能的,但B+树作为文件系统索引,是专门针对磁盘系统作过优化的,尤其是通过一个节点可以有多个孩子的特征并结合了文件页page
但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态(当然,它会受限于一定的数量)。这没办法用数组实现。但有了栈,这就变得非常方便了。...一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。 ?...图的类型 无向图 有向图 在程序语言中,图可以用两种形式表示: 邻接矩阵 邻接表 常见图遍历算法 广度优先搜索 深度优先搜索 面试中关于图的常见问题 实现广度和深度优先搜索 检查图是否为树 计算图的边数...面试中关于树结构的常见问题: 求二叉树的高度 在二叉搜索树中查找第k个最大值 查找与根节点距离k的节点 在二叉树中查找给定节点的祖先节点 字典树(Trie) 字典树,也称为“前缀树”,是一种特殊的树状数据结构...它能够提供快速检索,主要用于搜索字典中的单词,在搜索引擎中自动提供建议,甚至被用于IP的路由。 以下是在字典树中存储三个单词“top”,“so”和“their”的例子: ?
那么有没有一种数据结构能同时具备数组查找快的优点以及链表插入和删除快的优点,于是 树 诞生了。...二叉搜索树的效率在O(N)和O(logN)之间,取决于树的不平衡程度。最差也会退化成一个链表。 ②、红黑树 为了避免二叉树退化成链表,需要尽量保证树的平衡,于是有了 红黑树。...B+ 树为什么不行?(叶子节点存储在磁盘中,需要随机写磁盘,数据量大会导致性能急剧下降) LSM 树: 内存树存放近期写入的数据,有序且支持更新,支持随时查询。磁盘树则通常有多个,顺序写入。...③、原始网页存储 便于后面的离线分析,索引构建,需要将海量的原始网页存储。 网页很多,通常的文件系统不适合存储这么多的文件,而是将多个网页存储在一个文件中。...①、当用户在搜索框中,输入某个查询文本的时候,我们先对用户输入的文本进行分词处理。假设分词之后,我们得到 k 个单词。
数据库是用来存储与读取数据的,如何在这庞大的数据中查询我们想要的那一行呢?最简单的办法便是扫描整个数据表,一一对比。然而这样效率太低了。...,将多个单列索引改为复合索引,减少维护量 尽量挑选择度高,也就是重复率低的列作为索引,像性别这种列就不适合了,会在 B+ 树里做多层次多范围的搜索,还不如全表扫描呢 查找时,不对索引列做函数计算,否则不能使用到索引...B 树 在 B+ 树之前还有二叉搜索树和 B 树,我们来一步一步演化,看看有什么不同,先来看二叉搜索树: [二叉搜索树] 当要进行查找时,会按小于往左搜索,大于往右搜索的规则去寻找。...二叉搜索树只存了单个节点值,树的高度有可能会很高,如果用来存储索引数据,效率将会降低,不适用于 mysql 的索引,我们来看看 B 树吧: [B 树] 一个节点可以存储多个数据值。...当然,在插入删除时需要做对应的拆分或合并动作。 而且 B 树允许在非叶子节点也存储具体数据,这意味着在扫描搜索时也会将数据加载进来,这无疑增加了磁盘 IO。
《高性能MySQL》 衡量查询开销的三个指标 响应时间扫描的行数 服务时间(处理这条语句真正花的时间) 排队时间(等待资源,例如IO,行锁等) 扫描的行数 返回的行数 当删除了搜索条件列的索引时,语句进行全表扫描...当语句过长时,可能受到服务器端max_allowed_packet的限制。 服务器响应给用户的数据通常会很多,由多个数据包组成。(客户端不断接受服务器推送的数据,客户端没有办法让服务器停下来。...通过检查后,‘连接进/线程模块’从‘线程连接池’中取出空闲的被缓存的连接线程和客户端请求对接,如果失败则创建一个新的连接请求。...优化器和执行计划:将语法树转化为执行计划(子任务),并选择成本尽量小的执行计划。...在执行计划时,存储引擎通过调用实现的接口来完成。 ? 图三 四个表的表连接查询的执行计划指令树 3.返回结果 如果查询可以被缓存,MySQL将结果存放到查询缓存里。
数据结构往往同高效的检索算法和索引技术有关,明确几个概念。 数据:对客观事物的符号表示,指所有能输入到计算机中并被计算机程序处理的符号的总称。 上面场景中的注册信息,就是数据。...但你有没有思考过它是如何工作的呢?这个问题的解决思路是按照将最后的状态排列在先的顺序,在内存中存储历史工作状态(当然,它会受限于一定的数量)。这没办法用数组实现。但有了栈,这就变得非常方便了。...树( Tree) 树形结构是一种层级式的数据结构,由顶点(节点)和连接它们的边组成。 树类似于图,但区分树和图的重要特征是树中不存在环路。...一对节点(x,y)称为边(edge),表示顶点x连接到顶点y。边可以包含权重/成本,显示从顶点x到y所需的成本。 ? 堆(Heap) 堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。...散列表(Hash) 散列表(也叫哈希表)是一种查找算法,与链表、树等算法不同的是,散列表算法在查找时不需要进行一系列和关键字(关键字是数据元素中某个数据项的值,用以标识一个数据元素)的比较操作。
但是一个数据页中的记录可能非常多,为了逃避低效的遍历,InnoDB引擎的设计者想出了一种绝妙的搜索方法,把数据页中的所有记录(包括伪记录)分成若干个小组(并对每个小组内的组员数量做了规定),每个小组选出组内最大的一条记录作为...主键索引有两个特点:按照主键的大小对用户记录和数据页进行排序,记录用单向链表连接,数据页使用双向链表连接;B+树的叶子节点保存了用户的完整记录。...但是如此一来,表中数据就被完整记录了2次(主键索引的叶子节点和name索引的叶子节点),要是我们为其他字段再建立索引,磁盘空间可想而知。因此,我们得想个其他的办法。...现在得到主键的id了,然后根据主键id到主键索引中查找到完整的用户记录,这个过程叫做回表。如果没有为name列设置唯一性约束,那就可能找到多个符合条件的主键id,多回几次表就可以了。...虽然TablePlus在创建索引的时候能够选择HASH,但是实际创建完之后显示类型仍然是BTREE。
外部循环逐行消耗外部输入表。内部循环为每个外部行执行,在内部输入表中搜索匹配行。最简单的情况是,搜索时扫描整个表或索引;这称为单纯嵌套循环联接。如果搜索时使用索引,则称为索引嵌套循环联接。...如果不需要显式排序(例如,如果数据库内有合适的 B 树索引或可以对多个操作(如合并联接和对汇总分组)使用排序顺序),则合并联接尤其有效。...如果多个联接使用相同的联接列,这些操作将分组为一个哈希组。 (2)对于非重复或聚合运算符,使用输入生成哈希表(删除重复项并计算聚合表达式)。生成哈希表时,扫描该表并输出所有项。...(3)对于 union 运算符,使用第一个输入生成哈希表(删除重复项)。使用第二个输入(它必须没有重复项)探测哈希表,返回所有没有匹配项的行,然后扫描该哈希表并返回所有项。...=100是非连接谓词(对连接列的限制),salary=10000是单行谓词(对非连接列的限制)) 2.外连接时,一定是用显示的行数比较多的那个表作为驱动表。
一个更好的实现方式是:让词汇按字典顺序排序。借助二分搜索算法,可以快速搜索有序词汇表中的前缀。...由于二分搜索的每一步都会将搜索的范围减半,因此,总的搜索时间与词汇表中单词数量的对数成正比,即时间复杂度是 O(log N)。二分搜索的性能很好,但有没有更好的实现呢?当然有,往下看。...在图中,ne 的补全可以是两个分支:-ed 和 -sted。如果在数中找不到由前缀定义的路径,则说明词汇表中不包含以该前缀开头的单词。...有限状态自动机(DFA)实现 前缀树可以有效处理公共前缀,但是,对于其他共享词部分,仍会分别存储在每个分支中。比如,后缀 ed、ing、tion 在英文单词中特别常见。...•对于排序后的词汇表来说,在词汇表每个元素上增加 weight 属性并不难;•对于前缀树来说,将 weight 存储在叶子节点中,也是很简单的一个实现;•对于 DFA 来说,则较为复杂。
本篇文章将介绍二叉排序树的查找算法。 文章目录 何为二叉排序树查找? 查找算法实现 查找效率分析 二叉排序树的插入操作 二叉排序树的生成操作 二叉排序树的删除操作 何为二叉排序树查找?...上篇文章我们学习了折半查找,虽然折半查找算法将查找效率提高了,但是折半查找要求序列有序,所以当表插入、删除操作频繁的时候,为了维护表的有序性,就需要移动大量的元素,此时用折半查找显然事倍功半了。...那么有没有一种办法能够让查找效率依然高,而且可以很容易地实现插入、删除呢?基于此,我们可以改用动态查找表,这种表结构是在查找过程中动态生成的。...动态查找表根据用途不同,可以分为: 二叉排序树 平衡二叉树 红黑树 B-树 B+树 键树 本篇文章重点介绍二叉排序树。...二叉排序树又称为二叉搜索树、二叉查找树,其定义如下: 二叉排序树或是空树,或是满足如下性质的二叉树: 若其左子树非空,则左子树上所有结点的值均小于根结点的值 若其右子树非空,则右子树上所有结点的值均大于等于根结点的值
逻辑算子和Query树(逻辑执行计划) 逻辑算子是高级操作符,用于指定数据转换,而不指定要使用的物理执行算法。在关系模型中,逻辑操作符通常以表为输入,并生成一个单独的表作为输出。...通常,每个逻辑表达式在一个组中会有多个物理表达式。图5显示了一个包含图4中的表达式和其他等价表达式的组。 图片 通常我们用逻辑表达式中的一个来表示一个组。...图7显示了给定查询的初始搜索空间。 在初始搜索空间中,每个组只包含一个来自初始查询树的逻辑表达式。在图7中,顶级组[ABC]是查询的最终组。它对应于三个关系的连接的最终结果。...表1 [Bil97] 显示了n个关系连接的完整逻辑搜索空间的复杂度(仅显示逻辑表达式的数量)。例如,4个关系连接的搜索空间有15个组,包括54个逻辑表达式,表示了120个查询树。...使用附录B中显示的简单成本模型。优化器中使用的规则集显示在附录C中。嵌套循环连接和排序合并连接被用来实现连接算法。查询中使用的所有基本表在目录中被定义为具有相同的基数。
比如,系统中有一段话: 我爱吃肯德基 要求【肯德基】三个词给屏蔽掉,屏蔽后的语句显示为: 我爱吃*** 常规的做法可能是查询敏感词库中的敏感词,循环每一个敏感词,然后去输入的文本中从头到尾搜索一遍,...上面我们拿到匹配到的敏感词的index,接下来就要将句子中的敏感词显示出来了。...,大家有没有办法减少一次循环呢” 这个问题大家可以思考一下。...并且它与Trie树的关系就相当于KMP与BF算法的关系一样,AC自动机的效率要远远超出Trie树 AC自动机对Trie进行了改进,在Trie的基础上结合了KMP算法的思想,在树中加入了类似next数组的失效指针...AC自动机的构建主要包含以下两个操作 将多个模式串构建成Trie树 为Trie树中每个节点构建失败指针 AC自动机 这里给大家推荐一个项目,基于AC自动机的高性能敏感词匹配: “GitHub - toolgood
(IOT),InnoDB使用B+树索引模型,数据都是存储在B+树中的。...表中R1~R5的(ID,k)值分别为(100,1)、(200,2)、(300,3)、(500,5)、(600,6),每一个索引在InnoDB里面对应一棵B+树,两棵树的简意示意图如下: 1.2 主键索引和普通索引的区别...* from T where k=5,即普通索引查询方式,则需要先搜索k索引树,得到ID的值为500,再到ID索引树搜索一次,这个过程称为回表!...type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL。 possible_keys:显示可能应用在这张表中的索引。...eq_ref: 在连接中,MySQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用。
领取专属 10元无门槛券
手把手带您无忧上云