0

我有一个包含 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 磁盘 RAID 的 16 核服务器上使用 SQL Server 2008 R2 Std,没有其他应用程序或与 SQL 服务器的连接。

从性能计数器中,我可以看到没有队列/磁盘/cpu 使用,因为数据库完全在内存中。执行查询时,唯一可见的信息是 SQL 和 SSMS 之间大约 6 MB/s 的缓慢网络流量。

所有测试均在本地机器上完成。

关于如何加快速度或在哪里寻找问题的任何建议?

4

1 回答 1

0

我想这不是 SQL 服务器的问题,更多的是关于将大量数据从数据库传输到本地 Windows 交换文件/内存。为什么需要所有的表,SQL Server 会计算出在正常情况下哪些页面应该保留在缓存中。

于 2012-05-15T22:19:30.330 回答