Как отключить сортировку по группам по функциям, так как это требует много ресурсов и не требуется в моем случае - PullRequest
0 голосов
/ 03 ноября 2019

У меня есть SQL-запрос, для которого я выполняю «group by», но сортировка не требуется.

Я объединяю 2 таблицы,

  1. roleMstr
  2. aclMstr
  3. roleAclMap

'roleMstr', 'aclMstr' много ко многим и хранится в 'roleAclMap'

Я пытаюсь получить acl, назначенный дляэта роль активна (из-за мягкого удаления) и группирует их, чтобы найти назначенных и итоговых

Когда я зарегистрировался в SQL Server Profiler, сортировка занимает 68%, а сканирование индекса 32%

BEGIN
DECLARE @RoleCode VARCHAR(20);
SET @RoleCode = 'CLN';
    SELECT am.aclGroup, am.subAclGroup, SUM(CASE ram.roleCode WHEN @RoleCode THEN 1 ELSE 0 END) AS assignedChild, COUNT(*) AS totalChild
    FROM aclMstr am 
    LEFT JOIN roleAclMap ram
        ON am.acl_code = ram.acl_code AND ram.roleCode = @RoleCode
    WHERE am.isActive = 1
    group by am.aclGroup, am.subAclGroup;
END

Текст исполнителя плана запроса link1 , link2

Я подсчитываю, сколько acl назначено 'группе acl' на основе 'кода роли'

Я тоже получаю отсортированный столбец.

roleMstr contains roleCode 
 CONSTRAINT [pk_rolemstr_rolecode] PRIMARY KEY CLUSTERED 
(
    [roleCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

aclMstr contains aclCode, isActive, aclGroup, subAclGroup 
 CONSTRAINT [pk_aclmstr_aclcode] PRIMARY KEY CLUSTERED 
(
    [aclCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[roleAclMap](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [roleCode] [varchar](20) NOT NULL,
    [aclCode] [varchar](50) NOT NULL,
 CONSTRAINT [pk_roleaclmap_id] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],
 CONSTRAINT [uk_roleaclmap_rolecode_aclcode] UNIQUE NONCLUSTERED 
(
    [roleCode] ASC,
    [aclCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[roleAclMap]  WITH CHECK ADD  CONSTRAINT [fk_roleaclmap_aclmstr_aclcode] FOREIGN KEY([aclCode])
REFERENCES [dbo].[aclMstr] ([aclCode])
GO

ALTER TABLE [dbo].[roleAclMap] CHECK CONSTRAINT [fk_roleaclmap_aclmstr_aclcode]
GO

ALTER TABLE [dbo].[roleAclMap]  WITH CHECK ADD  CONSTRAINT [fk_roleaclmap_rolemstr_rolecode] FOREIGN KEY([roleCode])
REFERENCES [dbo].[roleMstr] ([roleCode])
GO

ALTER TABLE [dbo].[roleAclMap] CHECK CONSTRAINT [fk_roleaclmap_rolemstr_rolecode]
GO

Если сортировка может быть отключена с помощью запроса. Запрос будет выполнен в течение половины времени.

SQL Profiler XMLL

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...