У меня есть около 3500 объектов управления потоками, которые я хотел бы представлять как сеть для определения путей потока (по существу, ориентированного графика). В настоящее время я использую SqlServer и CTE для рекурсивного изучения всех узлов и их компонентов вверх, и это работает до тех пор, пока восходящий путь не поддерживает fork. Тем не менее, некоторые запросы экспоненциально больше, чем другие, даже если они не намного физически расположены по пути (т.е. Два или три сегмента "вниз по течению" ) из-за добавленной сложности восходящего потока; в некоторых случаях я пропустил это через десять минут, прежде чем убить запрос. Я использую простую таблицу с двумя столбцами, причем один столбец является самим объектом, а другой - средством, расположенным выше по потоку от указанного в первом столбце.
Я попытался добавить индекс, используя текущее средство, чтобы ускорить процесс, но это не имело никакого значения. И, что касается возможных соединений на графике, любые узлы могут иметь несколько восходящих соединений и могут быть связаны с несколькими "нисходящими" узлами.
Конечно, возможно, что в данных есть циклы, но я еще не понял хороший способ проверить это (кроме случаев, когда запрос CTE сообщил о максимальном рекурсивном счетчике, это было легко исправить).
Итак, мой вопрос: я неправильно храню эту информацию? Есть ли лучший способ, кроме CTE, запрашивать точки восходящего потока?