sql-server – SQL Server不同的设计查询性能

我一直在尝试检查不同类型的数据库设计的性能,但我不确定我得到的结果是否正确.

我有两个数据库,有不同的表,但意味着存储相同的信息.

>在我的第一个设计中,我将所有字段放在一个表中.
>在第二个设计中,我有多个表,并希望使用联接来查找我的记录.

有关更多详细信息,请参见图像:

《sql-server – 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#代码中看起来都是一样的.

最佳答案 你的第一个案例,非规范化表,理论上应该更快,但是数据库做得很好,使得规范化版本非常快,同时鄙视连接的额外工作.如果您有大量数据,您可能只会注意到非规范化模式的好处.

关于使用哪种模式,我想我会选择第二种模式,但如果没有Advanced Person 2表,为什么需要它呢?

点赞