当前位置: 首页 > 面试题库 >

是什么使SQL查询优化程序在嵌套循环和哈希联接之间做出决定

穆阳嘉
2023-03-14
问题内容

通常,是什么使SQL查询优化程序在嵌套循环和哈希联接之间做出决定。


问题答案:

NESTED LOOPS如果循环内的条件是可 保留的 ,则 很好 ,即可以使用index来限制记录数。

对于这样的查询:

SELECT  *
FROM    a
JOIN    b
ON      b.b1 = a.a1
WHERE   a.a2 = @myvar

a带头,a将记录from中的每条记录,并b应找到in中的所有相应记录。

如果b.b1被索引并且具有高基数,那么NESTED LOOP将是一种首选方式。

在中SQL Server,这也是执行非等值联接的唯一方法(子句中的=条件ON除外)

HASH JOIN 如果应该解析所有(或几乎所有)记录,则这是最快的方法。

它从中获取所有记录b,在其上构建一个哈希表,然后从中获取所有记录,a并使用join列的值作为键来查找哈希表。

  • NESTED LOOPS 需要这段时间:

Na * (Nb / C) * R

其中,NaNb是记录的数量abC是该指数的基数,而R对于行查找需要一定的时间(1在所有领域SELECTWHEREORDER BY分句由索引覆盖,大约10如果他们不)

  • HASH JOIN 需要这段时间:

Na + (Nb * H)

,其中H是构建和查找哈希表(每个记录)所需的常数的总和。它们被编程到引擎中。

SQL Server 使用表统计信息计算基数,计算并比较两个值,然后选择最佳计划。



 类似资料:
  • 问题内容: 我看到了一个将函数应用于元组的代码示例。结果,它返回一个负整数。我想知道这个功能做什么?Google没有帮助。我找到了一个页面,该页面解释了哈希的计算方式,但没有解释为什么我们需要此函数。 问题答案: 哈希是一个固定大小的整数,用于标识特定值。每个值都需要有自己的哈希,因此对于相同的值,即使不是同一对象,您也将获得相同的哈希。 散列值的创建方式应使结果值均匀分布,以减少所得到的散列冲突

  • 本文向大家介绍PHP优化教程之解决嵌套问题,包括了PHP优化教程之解决嵌套问题的使用技巧和注意事项,需要的朋友参考一下 在开发过程中,我们经常遇到一对多的场景, 例如:查询订单列表,并且展示订单详情商品、数量数据 思路0:传统做法 a. 查询订单列表 b. 遍历订单详情  分析:查询SQL次数为:N+1(N为订单个数),这样频繁请求数据库,影响效率  优化:减少频繁请求数据库 思路1: a. 查询

  • 问题内容: 我正在使用 PostgreSQL ,而我的SQL查询有一个奇怪的问题。 根据使用的最晚日期参数 。我的请求没有执行相同的操作。 这是我的工作查询: 该查询大约需要2秒的时间(对我来说这是可以的,因为我有很多行)。当我为此查询运行EXPLAIN ANALYZE时,我有以下内容: 现在,当我在当前月份尝试相同的查询( 我们是4月6日,因此我试图获取所有April的application_i

  • 问题内容: 我有一个节点和方式数据库。一种方式包含两个或更多节点。一些节点属于多种方式,因此被称为两种或多种方式之间的“联接”。 我试图找到所有以两种或两种以上方式连接的节点。所以我正在使用这个查询, way_nodes表包含每种方式的节点列表。 但是,在我的数据库上,它有9,021种方式和43,706个节点,这简直令人难以置信地缓慢,并且每秒只能给我20-30个节点。 最初,我尝试对节点使用次数

  • 从原理到应用分析什么是哈希? 一、什么是哈希? 哈希(hash):将任意长度的输入(关键字),通过Hash算法变成固定长度的输出。这个映射的规则就是对应的Hash算法,而原始数据映射后的二进制串就是哈希值,通常哈希值代表了关键字的存储位置。 但是为什么要这样做呢?或者说,哈希是怎样来的呢? 哈希的出现解决了两个问题:存储和搜索。 1. 存储(数据结构):如果在容器中保存对象及其关联的键,并且不用键

  • 我想优化下面的代码。streams会优化下面嵌套的foreach循环吗?如果是这样的话,我是streams的新手,有人能帮我吗?出于项目保密的目的,我在下文中替换了这些名称。应使用tList进行代码中的进一步处理。有人能帮忙吗?