我有一个包含1000万条记录的表,需要加载所有内存(缓存应用程序)。
表结构如下:
CREATE TABLE [TestTable] (
[Id] [int] IDENTITY(1,1) NOT NULL,
[RefId1] [int] NOT NULL,
[RefId2] [int] NOT NULL,
[RefId3] [int] NULL,
[Credits] [money] NOT NULL,
CONSTRAINT [PK_Table] PRIMARY KEY CLUSTERED ( [Id] ),
CONSTRAINT [UK_Table] UNIQUE NONCLUSTERED ([RefId1],[RefId2],[RefId3])
)
表大小约为:364080 KB(数据) - 341648 KB(索引)
使用简单的选择加载此数据量大约需要2分钟。
选择使用:
SELECT Id, RefId1, Credits, RefId3
FROM TestTable WITH (NOLOCK)
这是SQL Server的正常速度性能吗? 如何加快查询速度?
从缓存应用程序和SSMS测试了查询,结果几乎相同。
我在具有32 GB Ram和SSD Disk RAID的16核服务器上使用SQL Server 2008 R2 Std,没有其他应用程序或连接到SQL服务器。
从性能计数器中我可以看到没有队列/磁盘/ CPU使用,因为数据库完全在内存中。执行查询时,唯一可见的信息是SQL和SSMS之间的网络流量较慢,大约为6 MB / s。
所有测试都在本地机器上完成。
有关如何加快此问题或在何处寻找问题的任何建议?
答案 0 :(得分:0)
我想这不是SQL服务器问题,它更多的是将大量数据从数据库传输到本地Windows交换文件/内存。为什么需要所有表,SQL服务器将确定在正常情况下哪些页面应保留在缓存中。