मेरे पास निम्न सीटीई है जो पदानुक्रम में प्रत्येक नोड के स्तर को लाने के लिए रिकर्सन का उपयोग करता है और अंत में, चूंकि मेरे पास 27 स्तर हैं, इसलिए मैं प्रत्येक स्तर का नाम पकड़ रहा हूं क्योंकि अंतिम उपयोगकर्ता GUID देखने में रूचि नहीं रखता है।

    with EmpTree

    as
    (
      select e.DWH_Dim_TFS_File_DWH_File_Guid, cast(cast(e.DWH_Dim_TFS_File_DWH_File_Guid as binary(4)) as varbinary(max)) as EmpHier,
      1 as EmployeeLevel

      from [DWH].[Dim_TFS_File_View] as e
      where e.DWH_Dim_TFS_File_DWH_FileParent_Guid is null 
      union all
      select c.DWH_Dim_TFS_File_DWH_File_Guid, cast(p.EmpHier + cast(c.DWH_Dim_TFS_File_DWH_File_Guid as binary(4)) as varbinary(max)),
      EmployeeLevel +1 as EmployeeLevel
      from EmpTree as p
      join [DWH].[Dim_TFS_File_View] as c
        on c.DWH_Dim_TFS_File_DWH_FileParent_Guid = p.DWH_Dim_TFS_File_DWH_File_Guid
    )

    select TOP 100 PERCENT DWH_Dim_TFS_File_DWH_File_Guid
         ,EmployeeLevel
         ,(SELECT [File_Name] from [DWH].[Dim_TFS_File_View] as pu where nullif(cast(substring(EmpHier, 1, 4) as int), 0) = pu.DWH_Dim_TFS_File_DWH_File_Guid) level1
         ,(SELECT [File_Name] from [DWH].[Dim_TFS_File_View] as pu where nullif(cast(substring(EmpHier, 1, 9) as int), 0) = pu.DWH_Dim_TFS_File_DWH_File_Guid) level2
         ,(SELECT [File_Name] from [DWH].[Dim_TFS_File_View] as pu where nullif(cast(substring(EmpHier, 1, 13) as int), 0) = pu.DWH_Dim_TFS_File_DWH_File_Guid) level3
from EmpTree
order by DWH_Dim_TFS_File_DWH_File_Guid

मेरे पास 27 स्तर हैं ... मैं जिस दृश्य को पकड़ रहा हूं उसकी तीन अनुक्रमणिकाएं हैं: (माता-पिता, बच्चे) (माता-पिता) (बच्चा)

इस तालिका में 200M पंक्तियाँ हैं और बढ़ रही हैं .. तो यह क्वेरी बेहद धीमी है, मुझे लगता है कि इसमें से अधिकांश प्रति स्तर "नाम हथियाने" का भी कारण है ...

क्या यह मेरा परिणाम प्राप्त करने का एक अधिक कुशल तरीका है? शायद कुछ जोड़ के माध्यम से?

कृपया सहायता करें, अगर आप कर सकते हैं

धन्यवाद!!

उचित रिकर्सन नहीं मिल रहा है, केवल एंकर अनुभाग लाया जा रहा है।

with EmpTree

as
(
  select e.DWH_Dim_TFS_File_DWH_FileParent_Guid,e.DWH_Dim_TFS_File_DWH_File_Guid,
  1 as Depth,
  File_Name_String = CAST(CAST(e.File_Name AS BINARY(100)) AS VARBINARY(8000))

  from [dbo].[Hierarchy_Luis] as e
  where e.DWH_Dim_TFS_File_DWH_FileParent_Guid is null 
  union all
  select e.DWH_Dim_TFS_File_DWH_FileParent_Guid,e.DWH_Dim_TFS_File_DWH_File_Guid,
  p.Depth +1 as Depth,
  File_Name_String = CAST(CONCAT(p.File_Name_String, CAST(e.File_Name AS BINARY(100))) AS VARBINARY(8000))
  from [dbo].[Hierarchy_Luis] as e 
  join EmpTree as p
    on e.DWH_Dim_TFS_File_DWH_FileParent_Guid = p.DWH_Dim_TFS_File_DWH_File_Guid
)

SELECT
        p.DWH_Dim_TFS_File_DWH_File_Guid,
        p.Depth,
      Level01 =CAST(SUBSTRING(p.File_Name_String,   1, 100) as nvarchar(100)),
      Level02 =CAST(SUBSTRING(p.File_Name_String,   101, 100) as nvarchar(100)),
      Level03 =CAST(SUBSTRING(p.File_Name_String,   201, 100) as nvarchar(100)),
      Level04 =CAST(SUBSTRING(p.File_Name_String,   301, 100) as nvarchar(100)),
      Level05 =CAST(SUBSTRING(p.File_Name_String,   401, 100) as nvarchar(100)),
      Level07 =CAST(SUBSTRING(p.File_Name_String,   501, 100) as nvarchar(100)),
      Level08 =CAST(SUBSTRING(p.File_Name_String,   601, 100) as nvarchar(100)),
      Level09 =CAST(SUBSTRING(p.File_Name_String,   701, 100) as nvarchar(100)),
      Level10 =CAST(SUBSTRING(p.File_Name_String,   801, 100) as nvarchar(100)),
      Level11 =CAST(SUBSTRING(p.File_Name_String,   901, 100) as nvarchar(100)),
      Level12 =CAST(SUBSTRING(p.File_Name_String,   1001, 100) as nvarchar(100)),
      Level13 =CAST(SUBSTRING(p.File_Name_String,   1101, 100) as nvarchar(100)),
      Level14 =CAST(SUBSTRING(p.File_Name_String,   1201, 100) as nvarchar(100)),
      Level15 =CAST(SUBSTRING(p.File_Name_String,   1301, 100) as nvarchar(100)),
      Level16 =CAST(SUBSTRING(p.File_Name_String,   1401, 100) as nvarchar(100)),
      Level17 =CAST(SUBSTRING(p.File_Name_String,   1501, 100) as nvarchar(100)),
      Level18 =CAST(SUBSTRING(p.File_Name_String,   1601, 100) as nvarchar(100)),
      Level19 =CAST(SUBSTRING(p.File_Name_String,   1701, 100) as nvarchar(100)),
      Level20 =CAST(SUBSTRING(p.File_Name_String,   1801, 100) as nvarchar(100)),
      Level21 =CAST(SUBSTRING(p.File_Name_String,   1901, 100) as nvarchar(100)),
      Level22 =CAST(SUBSTRING(p.File_Name_String,   2001, 100) as nvarchar(100)),
      Level23 =CAST(SUBSTRING(p.File_Name_String,   2101, 100) as nvarchar(100)),
      Level24 =CAST(SUBSTRING(p.File_Name_String,   2201, 100) as nvarchar(100)),
      Level25 =CAST(SUBSTRING(p.File_Name_String,   2301, 100) as nvarchar(100)),
      Level26 =CAST(SUBSTRING(p.File_Name_String,   2401, 100) as nvarchar(100)),
      Level27 =CAST(SUBSTRING(p.File_Name_String,   2501, 100) as nvarchar(100))

    FROM EmpTree p
0
wr_lcb_ck 12 सितंबर 2017, 19:38
1
आपको कुछ नमूना डेटा और अपेक्षित आउटपुट देना होगा। एक सशर्त सबस्ट्रिंग में शामिल होना मेरे लिए स्केची लगता है ... लेकिन फिर आप बाइनरी और फिर varbinary (अधिकतम) पर कास्टिंग कर रहे हैं, इसलिए यह समझना मुश्किल है कि आप वास्तव में क्या कर रहे हैं ...
 – 
S3S
12 सितंबर 2017, 19:42
पहली बात... BINARY(4) GUID रखने के लिए पर्याप्त नहीं है... इसलिए आपको इससे खराब डेटा मिलने की संभावना है... CAST(CAST(e.DWH_Dim_TFS_File_DWH_File_Guid AS BINARY(4) ) ऐस वर्बिनरी (मैक्स)) एम्पीयर के रूप में। प्रदर्शन के लिए, मुझे यह मानना ​​​​होगा कि 3 सहसंबद्ध उपश्रेणियाँ यहाँ वास्तविक अड़चन हैं लेकिन हमें सत्यापित करने के लिए प्रयोग करने योग्य परीक्षण डेटा की आवश्यकता होगी।
 – 
Jason A. Long
12 सितंबर 2017, 20:16
कोड को करीब से देख रहे हैं... सहसंबद्ध उप-प्रश्नों की कोई आवश्यकता नहीं है। आप बस File_Name को पुनरावर्ती CTE में जोड़ सकते हैं।
 – 
Jason A. Long
12 सितंबर 2017, 20:21
सीटीई डीप रिकर्सन और बड़े डेटा सेट के साथ भयानक प्रदर्शन करता है। आप इसके बजाय स्ट्रेट अप लूप का उपयोग करने से भी बेहतर हो सकते हैं, इसलिए इसे एक ही बार में सभी डेटा को कैश करने की आवश्यकता नहीं है।
 – 
Xedni
12 सितंबर 2017, 21:09
जेसन आप सही हैं, लेकिन ये सामान्य गाइड नहीं हैं, लेकिन यह वह नाम है जो उन्होंने डेटाबेस पर दिया था। साथ ही, मैं रिकर्सन में File_Name प्राप्त कर सकता हूं, लेकिन फिर भी मुझे उन 27 कॉलम बनाना होगा और शायद "/" से अलग किए गए पूरे पथ के साथ एक कॉलम जोड़ना होगा और फिर प्रत्येक स्तर के लिए नाम की पहचान करने के लिए एक सबस्ट्रिंग फ़ंक्शन की तरह उपयोग करना होगा प्रत्येक स्तर?
 – 
wr_lcb_ck
12 सितंबर 2017, 21:18

1 उत्तर

सबसे बढ़िया उत्तर

प्रतिनिधि परीक्षण डेटा और अपेक्षित परिणाम के बिना, विशिष्टताओं को कम करना मुश्किल है ... हालांकि गेंद के हिस्से में निम्नलिखित होना चाहिए ...

IF OBJECT_ID('tempdb..#Dim_TFS_File_View', 'U') IS NOT NULL 
DROP TABLE #Dim_TFS_File_View;
GO 
CREATE TABLE #Dim_TFS_File_View (
    DWH_Dim_TFS_File_DWH_File_Guid INT NOT NULL,
    DWH_Dim_TFS_File_DWH_FileParent_Guid INT NULL,
    [File_Name] UNIQUEIDENTIFIER NOT NULL 
    );
INSERT #Dim_TFS_File_View (DWH_Dim_TFS_File_DWH_File_Guid, DWH_Dim_TFS_File_DWH_FileParent_Guid, [File_Name])
SELECT 
    DWH_Dim_TFS_File_DWH_File_Guid = t.n,
    DWH_Dim_TFS_File_DWH_FileParent_Guid = CASE WHEN t.n = 1 THEN NULL ELSE ISNULL(NULLIF(mi.ManagerID -1, 0), 1) END,
    [File_Name] = NEWID()
FROM 
    dbo.tfn_Tally(1000, 1) t
    CROSS APPLY ( VALUES (ABS(CHECKSUM(NEWID())) % t.n + 1) ) mi (ManagerID);

-- SELECT * FROM #Dim_TFS_File_View dtfv;

WITH 
    cte_Recursion AS (
        SELECT 
            e.DWH_Dim_TFS_File_DWH_File_Guid,
            NodeLevel = 1,
            File_Name_String = CAST(CAST(e.[File_Name] AS BINARY(16)) AS VARBINARY(8000))
        FROM 
            #Dim_TFS_File_View e
        WHERE 
            e.DWH_Dim_TFS_File_DWH_FileParent_Guid IS NULL
        UNION ALL 
        SELECT 
            e.DWH_Dim_TFS_File_DWH_File_Guid,
            NodeLevel = r.NodeLevel + 1,
            File_Name_String = CAST(CONCAT(r.File_Name_String, CAST(e.[File_Name] AS BINARY(16))) AS VARBINARY(8000))
        FROM 
            cte_Recursion r
            JOIN #Dim_TFS_File_View e
                ON r.DWH_Dim_TFS_File_DWH_File_Guid = e.DWH_Dim_TFS_File_DWH_FileParent_Guid
        )
SELECT
    r.DWH_Dim_TFS_File_DWH_File_Guid,
    r.NodeLevel,
    Level01 = NULLIF(CAST(SUBSTRING(r.File_Name_String,   1, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level02 = NULLIF(CAST(SUBSTRING(r.File_Name_String,  17, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level03 = NULLIF(CAST(SUBSTRING(r.File_Name_String,  33, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level04 = NULLIF(CAST(SUBSTRING(r.File_Name_String,  49, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level05 = NULLIF(CAST(SUBSTRING(r.File_Name_String,  65, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level06 = NULLIF(CAST(SUBSTRING(r.File_Name_String,  81, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level07 = NULLIF(CAST(SUBSTRING(r.File_Name_String,  97, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level08 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 113, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level09 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 129, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level10 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 145, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level11 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 161, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level12 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 177, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level13 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 193, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level14 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 209, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level15 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 225, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level16 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 241, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level17 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 257, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level18 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 273, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level19 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 289, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level20 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 305, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level21 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 321, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level22 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 337, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level23 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 353, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level24 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 369, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level25 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 385, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level26 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 401, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000'),
    Level27 = NULLIF(CAST(SUBSTRING(r.File_Name_String, 417, 16) AS UNIQUEIDENTIFIER), '00000000-0000-0000-0000-000000000000')
FROM
    cte_Recursion r;

आउटपुट का एक नमूना ...

DWH_Dim_TFS_File_DWH_File_Guid NodeLevel   Level01                              Level02                              Level03                              Level04                              Level05                              Level06                              Level07                              Level08                              Level09                              Level10                              Level11                              Level12                              Level13                              Level14                              Level15                              Level16                              Level17                              Level18                              Level19                              Level20                              Level21                              Level22                              Level23                              Level24                              Level25                              Level26                              Level27
------------------------------ ----------- ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------ ------------------------------------
1                              1           F7CCFA67-F558-41EE-B1BF-8D96692AB99F NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL
2                              2           F7CCFA67-F558-41EE-B1BF-8D96692AB99F 34CAF6D3-44BA-4DE1-9E03-836EE38C43E3 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL
3                              2           F7CCFA67-F558-41EE-B1BF-8D96692AB99F A69D9BE6-D83A-40AB-9D5B-04219317A3F9 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL                                 NULL
1
Jason A. Long 12 सितंबर 2017, 22:59
1
आप एक फकिंग बॉस हैं! यह समाधान भी काम करता है, प्रदर्शन की जांच नहीं करता है, लेकिन छोटे परीक्षण से मैंने परिणाम तेज कर दिए हैं। बहुत - बहुत धन्यवाद!!!!!
 – 
wr_lcb_ck
12 सितंबर 2017, 23:44
1
और हाँ, मुझे एहसास हुआ कि मेरे पास एक तरह का समाधान था .. मेरे सिर से इस रोडब्लॉक को लेने के लिए धन्यवाद!
 – 
wr_lcb_ck
12 सितंबर 2017, 23:48
अच्छा! मुझे खुशी है कि यह मदद करने में सक्षम था।
 – 
Jason A. Long
13 सितंबर 2017, 00:27