我一直在尝试检查不同类型的数据库设计的性能,但我不确定我得到的结果是否正确.
我有两个数据库,有不同的表,但意味着存储相同的信息.
>在我的第一个设计中,我将所有字段放在一个表中.
>在第二个设计中,我有多个表,并希望使用联接来查找我的记录.
有关更多详细信息,请参见图像:
当我针对第一个数据库运行下面的查询时,它将在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#代码中看起来都是一样的.
最佳答案 你的第一个案例,非规范化表,理论上应该更快,但是数据库做得很好,使得规范化版本非常快,同时鄙视连接的额外工作.如果您有大量数据,您可能只会注意到非规范化模式的好处.
关于使用哪种模式,我想我会选择第二种模式,但如果没有Advanced Person 2表,为什么需要它呢?