具有 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)