sql server - Optimization of TSQL CTE Recursion Query -


i have following cte uses recursion fetch level of each node in hierarhcy , in end, since have 27 levels, grabbing name of each of level since final user not interested in seeing guids.

    emptree          (       select e.dwh_dim_tfs_file_dwh_file_guid, cast(cast(e.dwh_dim_tfs_file_dwh_file_guid binary(4)) varbinary(max)) emphier,       1 employeelevel        [dwh].[dim_tfs_file_view] e       e.dwh_dim_tfs_file_dwh_fileparent_guid null        union       select c.dwh_dim_tfs_file_dwh_file_guid, cast(p.emphier + cast(c.dwh_dim_tfs_file_dwh_file_guid binary(4)) varbinary(max)),       employeelevel +1 employeelevel       emptree p       join [dwh].[dim_tfs_file_view] 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] [dwh].[dim_tfs_file_view] pu nullif(cast(substring(emphier, 1, 4) int), 0) = pu.dwh_dim_tfs_file_dwh_file_guid) level1          ,(select [file_name] [dwh].[dim_tfs_file_view] pu nullif(cast(substring(emphier, 1, 9) int), 0) = pu.dwh_dim_tfs_file_dwh_file_guid) level2          ,(select [file_name] [dwh].[dim_tfs_file_view] pu nullif(cast(substring(emphier, 1, 13) int), 0) = pu.dwh_dim_tfs_file_dwh_file_guid) level3 emptree order dwh_dim_tfs_file_dwh_file_guid 

i have 27 levels... view grabbing info has 3 indexes: (parent,child) (parent) (child)

this table has 200m rows , growing.. query extremely slow, think of cause of "name grabbing" per level...

is more efficient way achieve result? maybe through joins?

please if can

thanks!!

not getting proper recursions, fetching anchor section.

with emptree  (   select e.dwh_dim_tfs_file_dwh_fileparent_guid,e.dwh_dim_tfs_file_dwh_file_guid,   1 depth,   file_name_string = cast(cast(e.file_name binary(100)) varbinary(8000))    [dbo].[hierarchy_luis] e   e.dwh_dim_tfs_file_dwh_fileparent_guid null    union   select e.dwh_dim_tfs_file_dwh_fileparent_guid,e.dwh_dim_tfs_file_dwh_file_guid,   p.depth +1 depth,   file_name_string = cast(concat(p.file_name_string, cast(e.file_name binary(100))) varbinary(8000))   [dbo].[hierarchy_luis] e    join emptree 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) nvarchar(100)),       level02 =cast(substring(p.file_name_string,   101, 100) nvarchar(100)),       level03 =cast(substring(p.file_name_string,   201, 100) nvarchar(100)),       level04 =cast(substring(p.file_name_string,   301, 100) nvarchar(100)),       level05 =cast(substring(p.file_name_string,   401, 100) nvarchar(100)),       level07 =cast(substring(p.file_name_string,   501, 100) nvarchar(100)),       level08 =cast(substring(p.file_name_string,   601, 100) nvarchar(100)),       level09 =cast(substring(p.file_name_string,   701, 100) nvarchar(100)),       level10 =cast(substring(p.file_name_string,   801, 100) nvarchar(100)),       level11 =cast(substring(p.file_name_string,   901, 100) nvarchar(100)),       level12 =cast(substring(p.file_name_string,   1001, 100) nvarchar(100)),       level13 =cast(substring(p.file_name_string,   1101, 100) nvarchar(100)),       level14 =cast(substring(p.file_name_string,   1201, 100) nvarchar(100)),       level15 =cast(substring(p.file_name_string,   1301, 100) nvarchar(100)),       level16 =cast(substring(p.file_name_string,   1401, 100) nvarchar(100)),       level17 =cast(substring(p.file_name_string,   1501, 100) nvarchar(100)),       level18 =cast(substring(p.file_name_string,   1601, 100) nvarchar(100)),       level19 =cast(substring(p.file_name_string,   1701, 100) nvarchar(100)),       level20 =cast(substring(p.file_name_string,   1801, 100) nvarchar(100)),       level21 =cast(substring(p.file_name_string,   1901, 100) nvarchar(100)),       level22 =cast(substring(p.file_name_string,   2001, 100) nvarchar(100)),       level23 =cast(substring(p.file_name_string,   2101, 100) nvarchar(100)),       level24 =cast(substring(p.file_name_string,   2201, 100) nvarchar(100)),       level25 =cast(substring(p.file_name_string,   2301, 100) nvarchar(100)),       level26 =cast(substring(p.file_name_string,   2401, 100) nvarchar(100)),       level27 =cast(substring(p.file_name_string,   2501, 100) nvarchar(100))      emptree p 

without having representative test data , expected outcome, it's difficult nail down specifics... following should in ball part though...

if object_id('tempdb..#dim_tfs_file_view', 'u') 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 null else isnull(nullif(mi.managerid -1, 0), 1) end,     [file_name] = newid()      dbo.tfn_tally(1000, 1) t     cross apply ( values (abs(checksum(newid())) % t.n + 1) ) mi (managerid);  -- select * #dim_tfs_file_view dtfv;       cte_recursion (         select              e.dwh_dim_tfs_file_dwh_file_guid,             nodelevel = 1,             file_name_string = cast(cast(e.[file_name] binary(16)) varbinary(8000))                      #dim_tfs_file_view e                      e.dwh_dim_tfs_file_dwh_fileparent_guid null         union          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] binary(16))) varbinary(8000))                      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) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level02 = nullif(cast(substring(r.file_name_string,  17, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level03 = nullif(cast(substring(r.file_name_string,  33, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level04 = nullif(cast(substring(r.file_name_string,  49, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level05 = nullif(cast(substring(r.file_name_string,  65, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level06 = nullif(cast(substring(r.file_name_string,  81, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level07 = nullif(cast(substring(r.file_name_string,  97, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level08 = nullif(cast(substring(r.file_name_string, 113, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level09 = nullif(cast(substring(r.file_name_string, 129, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level10 = nullif(cast(substring(r.file_name_string, 145, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level11 = nullif(cast(substring(r.file_name_string, 161, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level12 = nullif(cast(substring(r.file_name_string, 177, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level13 = nullif(cast(substring(r.file_name_string, 193, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level14 = nullif(cast(substring(r.file_name_string, 209, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level15 = nullif(cast(substring(r.file_name_string, 225, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level16 = nullif(cast(substring(r.file_name_string, 241, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level17 = nullif(cast(substring(r.file_name_string, 257, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level18 = nullif(cast(substring(r.file_name_string, 273, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level19 = nullif(cast(substring(r.file_name_string, 289, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level20 = nullif(cast(substring(r.file_name_string, 305, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level21 = nullif(cast(substring(r.file_name_string, 321, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level22 = nullif(cast(substring(r.file_name_string, 337, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level23 = nullif(cast(substring(r.file_name_string, 353, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level24 = nullif(cast(substring(r.file_name_string, 369, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level25 = nullif(cast(substring(r.file_name_string, 385, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level26 = nullif(cast(substring(r.file_name_string, 401, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000'),     level27 = nullif(cast(substring(r.file_name_string, 417, 16) uniqueidentifier), '00000000-0000-0000-0000-000000000000')     cte_recursion r; 

a sample of output...

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 

Comments

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -