Performance Sql Server大量查询的表-我应该在另一个表中存储辅助信息(html文本)吗
概述: 我有一个表“category”,大部分用于对产品进行分类,目前看起来如下:Performance Sql Server大量查询的表-我应该在另一个表中存储辅助信息(html文本)吗,performance,sql-server-2008,c#-4.0,entity-framework-4,Performance,Sql Server 2008,C# 4.0,Entity Framework 4,概述: 我有一个表“category”,大部分用于对产品进行分类,目前看起来如下: CREATE TABLE [dbo].[Category] ( CategoryId int IDENTITY(1,1) NOT NULL, CategoryNode hierarchyid NOT NULL UNIQUE, CategoryString AS CategoryNode.ToString() PERSISTED, CategoryLevel AS CategoryNode.GetLevel()
CREATE TABLE [dbo].[Category]
(
CategoryId int IDENTITY(1,1) NOT NULL,
CategoryNode hierarchyid NOT NULL UNIQUE,
CategoryString AS CategoryNode.ToString() PERSISTED,
CategoryLevel AS CategoryNode.GetLevel() PERSISTED,
CategoryTitle varchar(50) NOT NULL,
IsActive bit NOT NULL DEFAULT 1
)
此表被大量查询以显示购物网站上的类别层次结构(通常为每个页面视图),并且可以包含大量的项目
我正在数据层中使用实体框架
问题是:
我需要添加一个可能相当大的“描述”,它可能以网页的整个内容的形式出现,我想知道是否应该将其存储在相关表中,而不是将其添加到现有的类别表中,因为实体框架将拖动“描述”列出数据库的时间为100%,而99.5%的时间我只想要CategoryTitle和CategoryId
通常我不会担心实体框架的开销,但在这种情况下,我认为考虑它可能很重要。我可以通过一个视图或一个存储过程中的复杂类型来解决这个问题,但这意味着我宁愿避免很多重构
我只是想知道是否有人有任何想法,建议或是想拍我的手腕
编辑:
我应该补充一点,我之所以不愿意设置一个辅助表,是因为我不喜欢添加一个与Category表有1:1关系的额外表的想法——这似乎有些毫无意义。但我也不是DBA,所以我不确定这是否是一种可接受的做法。我将存储在不同的表中,原因很简单,就是不增加类别表中记录的大小。由于这样的VARCHAR列而增加的记录大小将减少可容纳给定磁盘页面(通常大小为4KB)的记录数,从而增加要提取到主存以进行搜索的页面数,增加磁盘访问数,从而影响查询执行时间
我会将其存储在另一个表中(即,将类别表垂直划分为最常访问的列和不常使用的列),并在应用层定义一个
OneToOne
关系,该关系作为主类别实体中的一个成员,包含不常使用的列,将fetch类型设置为LAZY。您可以将列放入表中,然后创建一个覆盖所有其他列的索引。这样,当您使用当前模式进行所有查找时,将使用索引
这个结构的关键词是覆盖索引:感谢您的回复,它帮助我重新执行了以这种方式实施它的决定。