我有大约 3500 个防洪设施,我想将它们表示为一个网络来确定流动路径(本质上是一个有向图)。我目前正在使用 SqlServer 和 CTE 递归地检查所有节点及其上游组件,只要上游路径不分叉很多,它就可以工作。但是,由于增加了上游复杂性,一些查询比其他查询花费的时间呈指数增长,即使它们在物理路径上并不远(即两个或三个“下游”段)。在某些情况下,我已经让它在终止查询之前超过十分钟。我使用的是一个简单的两列表格,一列是设施本身,另一列是第一列中列出的设施的上游。
我尝试使用当前工具添加索引以帮助加快速度,但这没有任何区别。而且,对于图中可能的连接,任何节点都可以有多个上游连接,并且可以从多个“下游”节点连接。
数据中肯定有可能存在循环,但我还没有找到验证这一点的好方法(除了 CTE 查询报告最大递归计数命中;这些很容易修复)。
所以,我的问题是,我存储这些信息是否错误?除了 CTE 之外,还有更好的方法来查询上游点吗?