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

哪个具有更好的性能:派生表或临时表

叶经略
2023-03-14
问题内容

有时我们可以同时使用派生表和临时表编写查询。我的问题是哪个更好?为什么?


问题答案:

派生表是一种逻辑构造。

可以将其存储在中tempdb,在运行时通过在每次访问时重新评估基础语句来构建,甚至可以对其进行优化。

临时表是一种物理构造。它是在tempdb其中创建的表,并在其中填充了值。

哪种更好取决于查询所使用的查询,用于派生表的语句以及许多其他因素。

例如,每次使用时都可以(并且很可能会)重新评估CTEin中的(公用表表达式)SQL Server。该查询:

WITH    q (uuid) AS
        (
        SELECT  NEWID()
        )
SELECT  *
FROM    q
UNION ALL
SELECT  *
FROM    q

最有可能 产生两个不同NEWID()的。

在这种情况下,应使用临时表,因为它可以保证其值持久存在。

另一方面,此查询:

SELECT  *
FROM    (
        SELECT  *, ROW_NUMBER() OVER (ORDER BY id) AS rn
        FROM    master
        ) q
WHERE   rn BETWEEN 80 AND 100

最好使用派生表,因为使用临时表将需要从中获取所有值master,而此解决方案将只100使用索引on扫描第一条记录id



 类似资料:
  • 问题内容: 考虑以下两行代码 和 在性能上,以上两个语句有什么区别吗?我见过很多人使用后者,当被问及他们说这是最佳实践时,没有充分的理由。 问题答案: 没有不同。 第二个原因仅仅是因为C / C ++程序员总是执行分配而不是比较。 例如 而java编译器会生成编译错误。 因此,由于可读性强,我个人更喜欢第一个,人们倾向于从左到右阅读,而不是。

  • 问题内容: String s = “”; for(i=0;i<....){ s = some Assignment; } 要么 我不需要在循环外再次使用“ s”。第一个选项可能更好,因为不会每次都初始化一个新的String。但是,第二个结果将导致变量的范围仅限于循环本身。 编辑:回应米尔豪斯的回答。在循环中将String分配给常量是没有意义的吗?不,这里的“某些分配”是指从要迭代的列表中获得的变化

  • 在服务器端代码中,一般为了更好的性能,我们不应该使用“从表中选择*”,而应该根据需要查询必要的列(选择名称,从员工中添加)。这是我在数据库性能指南文章中读到的。 现在我用hibernate做了一个查询,我读到在hibernate中最好使用session.load(id)来根据主键检索记录。这将检索与给定“id”(表中的记录)的实体关联的所有列。 现在它是否与通用数据库性能指南相矛盾。使用hiber

  • 问题内容: 使用哪种更好或更方便: 要么 问题答案: 您是否完全需要类型属性?如果您使用的是HTML5,则不会。否则,是的。HTML 4.01和XHTML 1.0 根据需要指定属性,而HTML5具有可选属性,默认为。HTML5现在得到了广泛的实现,因此,如果您使用HTML5doctype,则是有效且不错的选择。 至于type属性中应该包含的内容,2006年注册的MIME类型旨在替代所有主要浏览器(

  • 问题内容: 我正在优化我的大型应用程序。我对以下两种方法感到困惑,请帮助确定哪种方法更快。 内联样式属性 使用ng样式 使用一次样式 注意 :对于,我使用了AngularOnce指令。 提前致谢。请告诉我哪个更快,为什么。 问题答案: 由于您正在优化相当大的应用程序,因此性能肯定受到质疑,我认为性能会更好,因为它可以在模型上设置监视,并且仅当模型更改时才会更新视图。 因此,我会选择还是根据您的情况

  • 问题内容: 数百万条记录的哪个更快:永久表 还是 临时表? 我只需要将其用于1500万条记录。处理完成后,我们将删除这些记录。 问题答案: 在您的情况下,我们使用称为临时表的永久表。这是大量进口的常用方法。实际上,我们通常使用两个登台表,一个带有原始数据,另一个带有清理后的数据,这使得研究提要中的问题变得更加容易(它们几乎总是我们客户发现向我们发送垃圾数​​据的新方式和多种方式的结果,但是我们必须