我一直在试图检查不同类型的数据库设计的性能,但我不确定我得到的结果是否正确。SQL Server不同的设计查询性能
我有两个数据库,不同的表,但意味着存储相同的信息。
- 在我的第一个设计中,我把所有的字段放在一张表中。
- 在第二个设计中,我有多个表,并希望使用连接来查找我的记录。
更详细的信息可以查看该图像:
当运行下面针对它在0.03秒执行第一数据库中的查询。
SELECT
a.[idPerson], a.[Id], a.[Description], a.[LastName], a.[nme],
a.[Email], a.[Phone], a.[grp]
FROM
[Student] a
WHERE
a.[grp] = 'R3PU56'
AND a.[nme] = 'tZv5oxqSDEoXPnU'
AND a.[Email] = 'gyRpWWCopv'
当我对第二个数据库运行下面的查询时,它也在0.03秒内执行。
SELECT
a.[Id], a.[grp], b.[Email], b.[Phone],
c.[Description], c.[LastName], c.[nme]
FROM
[Student2] a
JOIN
[AdvancedPerson2] AS b ON (a.[Id] = b.[Id])
JOIN
[Person2] AS c ON (a.[Id] = c.[Id])
WHERE
a.[grp] = 'R3PU56'
AND b.[Email] = 'gyRpWWCopv'
AND c.[nme] = 'tZv5oxqSDEoXPnU'
我期待第二个查询将比第一个查询要多得多,因为联接。我的问题是,为什么两个问题都花费大量的时间?如果它们与我应该使用的数据库结构相同?有些人可能会说第二个结构因为多个表而变得复杂,但我不在乎。我正在使用Telerik ORM,两者在C#代码中看起来都一样。
如果行数少于4位数(通常不需要'4位数',这只是一个粗略的指示),并且服务器没有负载,使用这样简单的几乎不可能有差异查询和结构。这个问题就是你的期望:你不能仅仅看着表格来“猜测”表演,而且你也没有考虑到各种rdbms组件在幕后做出的优化。 – Paolo
您可能会发现有用[不同继承映射策略的经典描述和比较](https://docs.oracle.com/cd/E19798-01/821-1841/bnbqr/index.html)。 –