У меня есть одна таблица ниже подписи
"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% стоимости запроса.