首页 > 解决方案 > SQL:就性能而言,一行中的逗号分隔字符串 V/S 多行单列

问题描述

我在下面有一张签名表

"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% 的查询成本。

标签: sql-serverdatabase-performancequery-performance

解决方案


推荐阅读