将记录保存在 SQL 服务器中的行或列中
Save records in rows or columns in SQL Server
我必须在 table 中保存三种文档类型。文档类型的数量是固定的,不会改变。有超过100万条记录,未来可能超过1亿条。为此,性能在我的程序中非常重要。我不知道哪种方式可以提高数据库性能。基于行还是基于列?
基于行:
CREATE TABLE [Person].[Document]
(
[Id] [uniqueidentifier] NOT NULL,
[PersonId] [uniqueidentifier] NOT NULL,
[Document] [varbinary](max) NULL,
[DocType] [int] NOT NULL,
)
基于列:
CREATE TABLE [Person].[Document]
(
[Id] [uniqueidentifier] NOT NULL,
[PersonId] [uniqueidentifier] NOT NULL,
[Document_Page1] [varbinary](max) NULL,
[Document_Page2] [varbinary](max) NULL,
[Document_Page3] [varbinary](max) NULL,
)
规范化(或如您所说 - 基于行)解决方案更灵活。
它允许您在不更改数据库结构的情况下更改为每个人保存的文档数量,并且通常是首选解决方案。
一百万行对于 SQL 服务器来说是一个很小的 table。
我见过数据库 table 有 5000 万行,性能非常好。
这是正确索引的问题。
我确实建议,如果您想要更好的性能,请为您的主键使用 int 标识列而不是 uniqueidentifier,因为它的重量非常轻,而且数据库更容易索引,因为它不是随机排序的。
我会选择标准化的解决方案。
我必须在 table 中保存三种文档类型。文档类型的数量是固定的,不会改变。有超过100万条记录,未来可能超过1亿条。为此,性能在我的程序中非常重要。我不知道哪种方式可以提高数据库性能。基于行还是基于列?
基于行:
CREATE TABLE [Person].[Document]
(
[Id] [uniqueidentifier] NOT NULL,
[PersonId] [uniqueidentifier] NOT NULL,
[Document] [varbinary](max) NULL,
[DocType] [int] NOT NULL,
)
基于列:
CREATE TABLE [Person].[Document]
(
[Id] [uniqueidentifier] NOT NULL,
[PersonId] [uniqueidentifier] NOT NULL,
[Document_Page1] [varbinary](max) NULL,
[Document_Page2] [varbinary](max) NULL,
[Document_Page3] [varbinary](max) NULL,
)
规范化(或如您所说 - 基于行)解决方案更灵活。
它允许您在不更改数据库结构的情况下更改为每个人保存的文档数量,并且通常是首选解决方案。
一百万行对于 SQL 服务器来说是一个很小的 table。
我见过数据库 table 有 5000 万行,性能非常好。
这是正确索引的问题。
我确实建议,如果您想要更好的性能,请为您的主键使用 int 标识列而不是 uniqueidentifier,因为它的重量非常轻,而且数据库更容易索引,因为它不是随机排序的。
我会选择标准化的解决方案。