SQL: разделенная запятыми строка в одной строке V / S несколько строк для одного столбца с точки зрения производительности - PullRequest
0 голосов
/ 22 мая 2018

У меня есть одна таблица ниже подписи

"tblProperties"

ID int,
DocID int,
PNAME varchar(50),
PVALUE varchar(max),
PType varchar(50),
Users varchar(max)

и

индексы

create index InxUsers on tblProperties(Users);
create index InxPValue on tblProperties(PVALUE);
create index InxPrDocID on tblProperties(DocID);

Здесь Users - это разделенный запятыми адрес электронной почты пользователей.Я выполняю различные запросы на выборку для таблицы, такие как

SELECT DocID
FROM tblProperties 
WHERE PNAME = 'AssignDocument' 
AND PVALUE LIKE '%abc%' 
AND Users LIKE '%ankit@gmail.com%';

Чтобы добиться максимальной производительности, я должен разбить таблицу выше на две таблицы

1) "tblProperties"

ID int,
DocID int,
PNAME varchar(50),
PVALUE varchar(max),
PType varchar(50)


2) "tblUsersDocument"

ID int,
DocID int,
User varchar(320)

и индексы

create index InxUsers on tblProperties(Users);
create index InxPValue on tblProperties(PVALUE);
create index InxUseEmail on tblUsersDocument(User);
create index InxDocID on tblUsersDocument(DocID);
create index InxPrDocID on tblProperties(DocID);

И запрос на выборку

SELECT p.DocID
FROM tblProperties AS p inner join tblUsersDocument AS u 
on p.DocID = u.DocID 
WHERE p.PNAME = 'AssignDocument' 
AND p.PVALUE LIKE '%abc%' 
AND u.User = 'ankit@gmail.com';

Какой из них лучше с точки зрения производительности первый или второй?

Я протестировал оба в SHOWPLAN_XML в одной партии, первый -дает 25%, а второй дает 75% стоимости запроса.

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