Настройка системы для увеличения быстродействия при работе с деревом папок

Источник: dvprofessionals

Для подсветки непрочитанных карточек в папке, для каждого пользователя, выполняется SQL процедура, которая определяет и подсчитывает количество непрочитанных пользователем карточек. Выполнение этой процедуры, влияет на время загрузки дерева папок, навигацию по вложенным узлам дерева папок, отображение содержимого папки, особенно для папок с большим количеством карточек.

Для увеличения быстродействия при работе с деревом папок рекомендуется отключать подсветку непрочитанных карточек на всех папках системы, кроме личных папок пользователей.

Ниже приведен скрипт, отключающий подсветку непрочитанных карточек на всех папках, кроме личных папок пользователей.

 
01.SET XACT_ABORT ON;
02. 
03.IF OBJECT_ID('dbo.FolderInfo') IS NULL
04.BEGIN
05.  CREATE TABLE dbo.FolderInfo
06.  (
07.      FolderID uniqueidentifier PRIMARY KEY
08.     ,Flags    int NULL
09.  )
10.END
11. 
12.DECLARE @Folders TABLE (Id uniqueidentifier PRIMARY KEY)
13. 
14.-- Select folders from UserProfile card
15.INSERT @Folders(Id)
16.SELECT DISTINCT DefaultFolderID
17.FROM dbo.[dvtable_{C64843C3-484F-45E0-9B8A-900EA91BE54D}] WITH(NOLOCK)
18.WHERE DefaultFolderID IS NOT NULL;
19. 
20.BEGIN TRAN;
21. 
22.-- Backup old folder flags
23.WITH UserFoldersTree(FolderID, NestLevel)
24.AS
25.(
26.  SELECT
27.      Id
28.     ,1
29.  FROM @Folders
30. 
31.  UNION ALL
32. 
33.  SELECT
34.      RowID
35.     ,tPrev.NestLevel + 1
36.  FROM dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] tFld WITH(NOLOCK)
37.  JOIN UserFoldersTree tPrev ON tPrev.FolderID = tFld.ParentTreeRowID
38.)
39.INSERT dbo.FolderInfo
40.(
41.  FolderID
42. ,Flags
43.)
44.SELECT
45.  RowID
46. ,Flags
47.FROM dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] tFld WITH(NOLOCK)
48.LEFT JOIN UserFoldersTree tUserFld ON tUserFld.FolderID = tFld.RowID
49.WHERE tUserFld.FolderID IS NULL
50. 
51.-- Switch off Unread count
52.UPDATE tFld
53.SET Flags = ISNULL(tFld.Flags, 0) / 4 -- NO_UNREAD_COUNT flag
54.FROM dbo.[dvtable_{FE27631D-EEEA-4E2E-A04C-D4351282FB55}] tFld WITH(TABLOCK)
55.JOIN dbo.FolderInfo tInfo WITH(NOLOCK) ON tInfo.FolderID = tFld.RowID
56. 
57.IF @@ERROR <> 0
58.  ROLLBACK TRAN;
59. 
60.COMMIT TRAN;

Страница сайта http://www.interface.ru
Оригинал находится по адресу http://www.interface.ru/home.asp?artId=22103