在具有330K行的表的所有列上进行选择需要6分钟

时间:2019-04-16 18:41:20

标签: sql sql-server select

我正在尝试检索所有列以从表中获取所有行。这是在MS SQL Server 2012上。

我的表格信息如下: 行数330K 列数-18, Indexe-ID列上的集群索引, 数据空间-57MB, 索引空间10MB,

当我从表中选择所有列是Management Studio时,大约需要6分钟才能获取所有行。它执行群集索引扫描。 如何提高性能以更快地检索表? 我的意图是在不到1分钟的时间内运行它。

我创建了该表而不是视图。该表替换视图。我以为所有数据都放在表中(避免在视图中联接)会提高性能。但事实并非如此。该表已创建,数据已填充。

EXECUTION PLAN

创建表语句:

CREATE TABLE [abc].[abc](
    [ID] [int] NOT NULL,
    [ss_ID] [numeric](10, 0) NULL,
    [Bm] [numeric](16, 3) NULL,
    [Em] [numeric](16, 3) NOT NULL,
    [Bs] [int] NULL,
    [es] [numeric](16, 3) NULL,
    [Series] [int] NULL,
    [pp_NUM] [numeric](16, 3) NULL,
    [dia] [numeric](8, 4) NULL,
    [thickness] [numeric](7, 4) NULL,
    [Grade_Num] [numeric](12, 8) NULL,
    [Rnum] [numeric](13, 8) NULL,
    [Spct] [numeric](14, 2) NULL,
    [Created_By_User_ID] [nvarchar](45) NULL,
    [Created_DateTime] [datetime] NULL,
    [Last_Mod_By_User_ID] [nvarchar](45) NULL,
    [Last_Mod_DateTime] [datetime] NULL,
    [Install_Date] [datetime] NULL,
 CONSTRAINT [PK_abc_ID] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 75) ON [PRIMARY]
) ON [PRIMARY]

谢谢!

3 个答案:

答案 0 :(得分:1)

如果选择所有行和所有列,它将始终扫描整个表,在这种情况下为聚集索引。

无法提高性能,唯一的选择是返回较少的信息,以便索引可以真正起到帮助作用。

答案 1 :(得分:1)

如果您读取了所有列和所有行,则需要从存储到PC传输大约56MB。典型的瓶颈有:

  1. 存储-尝试在表上使用PAGE压缩或创建列存储索引
  2. 网络-升级网络或使用专用连接
  3. CPU(在这种情况下不常见)-添加更多CPU

您需要在查询运行时对其进行监视,并确定瓶颈。

答案 2 :(得分:0)

在这种情况下,您可以为此简单地创建一个视图。第一次加载将花费一些时间。下次执行计划直接加载一次查询后,无需担心查询执行。