我创建了一张表来插入我应用程序中的所有文档。这是一个简单的表,我们称之为DOC_DATA,它有三个字段:DOC_ID,FileSize和Data。Data是varbinary(max)类型。
然后我有很多其他数据的表(如CUSTOMERS_DOCUMENTS、EMPLOYEES_DOCUMENTS等),这些表包含其他数据(如“文档描述”、“创建者”、“客户ID”...)。虽然我的情况并非完全如此,但通过编写此示例,我可以更好地表达自己。所有这些表都具有对DOC_DATA.DOC_ID的外键约束。
当用户搜索客户文档时,他将运行类似于以下查询的查询语句:
我的问题是:我们从一个可能包含许多GB数据的表(DOC_DATA表)中读取字段,这个查询的性能会不会很差?或者这不是一个问题?
另一种解决方案是将FileSize字段放在所有主要表中(CUSTOMER_DOCUMENTS,EMPLOYEES_DOCUMENTS等)。当然,连接对性能有一定影响,现在我不是在讨论一般的连接问题,而是在讨论当我不关心巨大字段时,是否连接一个巨大的表。
请注意:我正在维护一个旧系统,所以我不讨论最好的设计方案,只讨论在这种情况下最好的选择。
然后我有很多其他数据的表(如CUSTOMERS_DOCUMENTS、EMPLOYEES_DOCUMENTS等),这些表包含其他数据(如“文档描述”、“创建者”、“客户ID”...)。虽然我的情况并非完全如此,但通过编写此示例,我可以更好地表达自己。所有这些表都具有对DOC_DATA.DOC_ID的外键约束。
当用户搜索客户文档时,他将运行类似于以下查询的查询语句:
select CD.*, DD.FileSize
from DOC_DATA DD
join CUSTOMERS_DOCUMENTS CD ON CD.DOC_ID = DD.DOC_ID
我的问题是:我们从一个可能包含许多GB数据的表(DOC_DATA表)中读取字段,这个查询的性能会不会很差?或者这不是一个问题?
另一种解决方案是将FileSize字段放在所有主要表中(CUSTOMER_DOCUMENTS,EMPLOYEES_DOCUMENTS等)。当然,连接对性能有一定影响,现在我不是在讨论一般的连接问题,而是在讨论当我不关心巨大字段时,是否连接一个巨大的表。
请注意:我正在维护一个旧系统,所以我不讨论最好的设计方案,只讨论在这种情况下最好的选择。