Всем доброго дня!
Читал документацию, но до конца не пойму - правильно ли сделал или нет, и можно ли сделать что то еще.
Есть таблица:
CREATE TABLE [Application].[PA] (
[Id] [int] IDENTITY(1,1) NOT NULL,
[CRId] [int] NOT NULL,
[AGId] [int] NOT NULL,
[PPId] [int] NOT NULL,
CONSTRAINT [PK_PA] 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]
) ON [PRIMARY]
GO
ALTER TABLE [Application].[PA] WITH CHECK ADD CONSTRAINT [FK_PA_PAG] FOREIGN KEY([AGId])
REFERENCES [Application].[PAG] ([Id])
GO
ALTER TABLE [Application].[PA] CHECK CONSTRAINT [FK_PA_PAG]
GO
ALTER TABLE [Application].[PA] WITH CHECK ADD CONSTRAINT [FK_PA_PP] FOREIGN KEY([PPId])
REFERENCES [Application].[PP] ([Id])
GO
ALTER TABLE [Application].[PA] CHECK CONSTRAINT [FK_PA_PP]
GO
У нее есть некластеризованный индекс
CREATE NONCLUSTERED INDEX [PA_NC_Index] ON [Application].[PA]
(
[AGId] ASC,
[PPId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
[CRId] - это записи, которые в конечном итоге надо получить, чтобы понять какие строки надо выбрать из другой таблицы;
[AGId] - основной объект, уникален
[PPId] - дополнительный объект внутри основного, но является уникальным между основными объектами
Обращение в основном происходит подобным образом:
select [CRId] from [Application].[PA] where [PA].[AGId]=1 and [PA].[PPId]=21
В таблице более 1 млн записей, и начинает беспокоить вопрос - правильно ли организовано хранение и выборка? Или можно что то изменить / улучшить?
В случае, если делаем связь к этой таблице, то сразу получаем сильные тормоза (2 сек, прямая выборка - 0,02 сек), например
select top(10) Id
from [Application].T inner join
[Application].[PA] on T.id=PA.[CRId]
where [PA].[AGId]=1 and [PA].[PPId]=21