我正在尝试检索所有列以从表中获取所有行。这是在MS SQL Server 2012上。
我的表格信息如下: 行数330K 列数-18, Indexe-ID列上的集群索引, 数据空间-57MB, 索引空间10MB,
当我从表中选择所有列是Management Studio时,大约需要6分钟才能获取所有行。它执行群集索引扫描。 如何提高性能以更快地检索表? 我的意图是在不到1分钟的时间内运行它。
我创建了该表而不是视图。该表替换视图。我以为所有数据都放在表中(避免在视图中联接)会提高性能。但事实并非如此。该表已创建,数据已填充。
创建表语句:
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]
谢谢!
答案 0 :(得分:1)
如果选择所有行和所有列,它将始终扫描整个表,在这种情况下为聚集索引。
无法提高性能,唯一的选择是返回较少的信息,以便索引可以真正起到帮助作用。
答案 1 :(得分:1)
如果您读取了所有列和所有行,则需要从存储到PC传输大约56MB。典型的瓶颈有:
您需要在查询运行时对其进行监视,并确定瓶颈。
答案 2 :(得分:0)
在这种情况下,您可以为此简单地创建一个视图。第一次加载将花费一些时间。下次执行计划直接加载一次查询后,无需担心查询执行。