Как правильно построить график с глубиной n из моих данных SQL - PullRequest
0 голосов
/ 18 августа 2011

У меня есть следующие данные

| From | To |
+------+----+
|    1 |  2 |
|    2 |  3 |
|    2 |  4 |
|    5 |  1 |
|    6 |  5 |
|    5 |  7 |
+------+----+

Теперь я хотел бы запросить мои данные с помощью расширенного выбора CTE, например

DECLARE @start INT;
SET @start = 1;
DECLARE @depth INT;
SET @depth = 1;

WITH
[Recursive] AS
(
    SELECT
        1 as [level],
        *
    FROM    [dbo].[myTable]
    WHERE   @start IN ([From], [To])
    UNION ALL
    SELECT
        t1.[level] + 1,
        t2.*
    FROM    [Recursive] t1
    JOIN    [dbo].[myTable] t2
        ON    t1.[level] < @depth
        AND
        (
            t1.[From] IN (t2.[From], t2.[To])
            OR t1.[To] IN (t2.[From], t2.[To])
        )
)
SELECT DISTINCT
    [From],
    [To]
FROM    [Recursive]

С этими небольшими тестовыми данными производительность вполне удовлетворительная, но при увеличении данных и глубины выполнение становится очень плохим (вызвано объединением нескольких столбцов).

Как правильно сформулировать такую ​​задачу?

1 Ответ

0 голосов
/ 20 августа 2012

Поскольку я использую C # на своей клиентской стороне, я закончил тем, что потянул все данные к клиенту и к графическим вычислениям в C #. Это намного более производительно, и, поскольку объем памяти не является проблемой, я доволен этим:)

...