У меня есть база данных определяются следующим образом:SQL Server пересекаются запрос
create table Classes (
Id INT not null,
Text NVARCHAR(255) null,
primary key (Id)
)
create table Documents (
Id INT not null,
Title NVARCHAR(MAX) null,
Abstract NVARCHAR(MAX) null,
Year INT null,
primary key (Id)
)
create table Documents_Tokens (
DocumentFk INT not null,
TokenFk INT not null
)
create table Documents_Classes (
DocumentFk INT not null,
ClassFk INT not null
)
create table Tokens (
Id INT not null,
Text NVARCHAR(255) null,
primary key (Id)
)
Существует т о: м связь между документами и классами и документами и жетонами.
Я бы хотел (а) определить определенную статистику. Один stat - это A, который измеряет совпадение классов и токенов. Я в настоящее время определяю этот стат как это:
with combs as
(
select
a.Id as classid,
a.text as class,
b.Id as tokenid,
b.text as token
from dbo.Classes as a
cross join dbo.Tokens as b
)
,A as
(
select token, class, count(distinct DocumentFk) as A from
(
select
token,
class,
DocumentFk
from combs
inner join dbo.Documents_Classes on classid = ClassFk
group by token, DocumentFk, class
intersect
select
token,
class,
DocumentFk
from combs
inner join dbo.Documents_Tokens on tokenid = tokenFk
group by token, DocumentFk, class
) T group by token, class
)
...
К сожалению, этот запрос принимает возрасты (я добавил индексы после запуска анализатора запросов). Является ли это наиболее эффективным способом определения A? Если нет, то лучший способ? Я мог бы также изменить базовую структуру базы данных, чтобы потенциально ускорить работу ...
Любая обратная связь будет очень признательна.
Откуда берутся гребни? – RichardTheKiwi
sql server 2005 – cs0815
@cyberkiwi извините, забыл материал для расчески – cs0815