AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 17302
Accepted
A-K
A-K
Asked: 2012-05-02 06:07:47 +0800 CST2012-05-02 06:07:47 +0800 CST 2012-05-02 06:07:47 +0800 CST

有人在生产中使用 HierarchyId 吗?它可靠吗?

  • 772

是否有人在实际生产中使用 HierarchyId 并使用合理大小的表格,超过几千行?它可靠/高效吗?到目前为止,我还没有发现任何不隶属于供应商的人推荐它,Paul Nielsen在这里建议不要这样做。

您在实际生产系统中使用 HierarchyId 有何经验?

当您选择 HierarchyId 而不是其替代方案时,您使用了哪些标准?

sql-server sql-server-2008
  • 5 5 个回答
  • 8771 Views

5 个回答

  • Voted
  1. Best Answer
    Kirk Broadhurst
    2012-05-08T20:13:22+08:002012-05-08T20:13:22+08:00

    我已经实现了 HierarchyID 并发现它提供了良好的性能和易于使用。

    我在相对较小的数据集(数万行)上使用了它,层次结构深度可达 10 个分支。

    为什么要使用它?HierarchyID 类型提供了许多帮助方法(例如IsDescendantOf),它们使您的工作比滚动您自己的物化路径更容易。

    Paul Nielsen 对 StackOverflow 的评论让我感到困惑 - HierarchyID是一个物化路径。我更倾向于同意他回答下面的评论。

    一个更好的问题可能是“为什么不使用它”。它易于使用,提供了许多您自己编写的功能,并且性能良好(在我有限的测试中)。

    • 9
  2. A-K
    2012-05-11T09:57:41+08:002012-05-11T09:57:41+08:00

    这是对 Kirk 的问题“为什么不使用它 (HierarchyId)”的回答。与物化路径相比,在某些重要情况下,HierarchyId 似乎性能较差且使用起来不太方便。

    原因很简单:引用Microsoft 对 Connect 的评论,“问题在于 CLR 调用,包括 hierarchyID 的方法,对查询优化器来说是不透明的。这是设计使然。但是,这意味着它们的基数估计有时可能相当错误的。”

    另一方面,实现物化路径在我们第一次需要时非常容易,而下一次它本质上是一个复制粘贴任务。因此,我们只需付出很少的努力即可获得更通用、性能更好的解决方案。

    所以我完全同意 Paul Nielsen 的观点,他在其名为“Microsoft® SQL Server® 2008 圣经”的优秀著作中写道:“新的 HierarchyID 并非没有争议。它是新的并且有大量的新闻和演示时间,但我我不确定这是一个需要其他解决方案的问题。”

    • 6
  3. Jack Corbett
    2012-05-02T06:47:47+08:002012-05-02T06:47:47+08:00

    我公司在直销、多层次营销软件中使用 HeirachyID。有用。我还没有真正用它做过任何工作,我只知道我们正在使用它。

    我看到的最大问题是我们以循环方式遍历关卡,而不是更多地基于集合。在那个领域,它对我们来说表现并不好,但我不确定这是否是类型或我们实现它的问题。

    • 3
  4. Lorin Thwaits
    2016-04-30T00:24:06+08:002016-04-30T00:24:06+08:00

    hierarchyid 的一个问题是您获得了供应商锁定。但我确实找到了 Adam Milazzo 的一篇很棒的文章,内容是关于内部一切是如何运作的:

    http://www.adammil.net/blog/view.php?id=100

    有了这个,我可以编写一个 Postgres 脚本来从 MSSQL 转换我的数据集。还将它包含在我编写的将 AdventureWorks 数据库导入 Postgres 的脚本中:

    https://github.com/lorint/AdventureWorks-for-Postgres

    只需在 install.sql 文件中搜索“hierarchyid”,您很快就会找到转换它的参考。

    • 1
  5. gavin
    2019-05-08T04:39:29+08:002019-05-08T04:39:29+08:00

    我们团队已经在生产中实现了,一开始性能不错,2年后,表现在有43万行,getroot和getdecendent需要3秒,都是计算下一个插入记录的Id值。现在单个子树插入大约需要 16 秒,这根本不可接受。

    • 0

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 是否有开发人员遵循数据库更改的“最佳实践”类型流程?

  • 如何确定是否需要或需要索引

  • 从 SQL Server 2008 降级到 2005

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve