2

具有 20 列(ints、bools 和 varchar(50)'s)的表检索速度非常慢,因为一列的类型为 varchar(max)。

该表有 680 行,我正在检索最多 5 或 6 个结果。

由于某种原因,如果结果包含类型为 varchar(MAX) 的列,则 select 语句会非常慢。

SELECT     Id, Title, Description, FieldType, FieldName, DynamicMenuId, RelatedDynamicMenuId, RelatedDynamicMenuField, RelatedDynamicMenuFieldDisplay, 
                  CustomTableId, Position, ShowInGrid, AllowSelection, DefaultValue, DocumentUploadPath, RelatedWhereClause, RequiresSearch, IsRequired, DataType, 
                  FieldGroupId
FROM         dbo.SMDynamicMenuField
WHERE     (DynamicMenuId = 55)

供参考; 我们已经使用脚本文件将表的内容(模式和数据)从一台服务器移动到另一台服务器。

知道这是怎么可能的吗?

// 插入更多信息。好的,情节变厚了。

创建了索引,但它并没有带来任何(明显的)性能提升。

我现在在更多的数据库(同一台服务器)上得到它。从探查器中获取以下查询(来自实体框架的查询):

exec sp_executesql N'SELECT 
[Project1].[Id] AS [Id], 
[Project1].[AppartmentId] AS [AppartmentId], 
[Project1].[ImageTitle] AS [ImageTitle], 
[Project1].[ImageDescription] AS [ImageDescription], 
[Project1].[ImageFile] AS [ImageFile], 
[Project1].[Position] AS [Position]
FROM ( SELECT 
[Extent1].[Id] AS [Id], 
[Extent1].[AppartmentId] AS [AppartmentId], 
[Extent1].[ImageTitle] AS [ImageTitle], 
[Extent1].[ImageDescription] AS [ImageDescription], 
[Extent1].[ImageFile] AS [ImageFile], 
[Extent1].[Position] AS [Position]
FROM [dbo].[AppartmentImage] AS [Extent1]
WHERE [Extent1].[AppartmentId] = @p__linq__0
)  AS [Project1]
ORDER BY [Project1].[Position] ASC',N'@p__linq__0 int',@p__linq__0=56
go

这有时会增加加载时间。无论记录多少,加载时间总是增加大约 16-18 秒。

完整的 sql server 不处理任何请求(对其他数据库也是),因此它会导致所有站点阻塞并等待此操作完成,然后继续。

几乎就像每次请求都会填满内存一样!

服务器规格足够公平;webserver 8gigs ram,sql也一样。目前在 IIS7 上托管大约 20 个站点(所有 .net MVC 都使用 EF 5)

4

0 回答 0