Sql 表性能

Sql 表性能,sql,sql-server-2014,Sql,Sql Server 2014,我有一个存储发送电子邮件的表格,它的选择速度慢得可笑。 网格具有自定义分页,但实际的SQL查询速度很慢,没有意义 数据可以追溯到2012年,但我们删除了2016年1月1日之前的所有数据,我重新构建了索引 返回200k行需要1分钟30到2分钟。(不包括电子邮件内容字段,因为公平地说,这可能是一个很大的html字符串) 任何想法,因为它真的没有意义,它是如此缓慢220k是没有太多的记录 栏目: PK EmailID EmailTO varchar200 EmailCC varchar200 Subj

我有一个存储发送电子邮件的表格,它的选择速度慢得可笑。 网格具有自定义分页,但实际的SQL查询速度很慢,没有意义

数据可以追溯到2012年,但我们删除了2016年1月1日之前的所有数据,我重新构建了索引

返回200k行需要1分钟30到2分钟。(不包括电子邮件内容字段,因为公平地说,这可能是一个很大的html字符串)

任何想法,因为它真的没有意义,它是如此缓慢220k是没有太多的记录

栏目:

PK EmailID
EmailTO varchar200
EmailCC varchar200
Subject varchar500
Message varchar max
Data sent smalldatetime
EmailBCC varchar max
查询:

select EmailID, EmailTo, EmailCC, Subject, DateSent 
from dbo.OutgoingEmails
200603行的时间为1:38

执行计划:


等待统计信息:

请在表上运行reorg和runstat,然后尝试查询。您刚刚重建了索引,为什么不在从表中删除一堆数据后重建表页呢

REORG和RUNSTAT

REORGANIZE TABLE dbo.OutgoingEmails;

UPDATE STATISTICS dbo.OutgoingEmails; 

您正在使用哪些RDBMS?硬件等是什么。?表上有索引吗?200K条记录代表产品的多少数据(最大列数可能很大)它是SQL 2014此查询的实际执行计划是什么样子的?@NevilleKuyt Kuyt主键上只有一个索引,关于第二个问题-max列被排除在select之外,正如我在上面的查询中介绍的,您应该为执行查询的会话收集等待统计信息。为了查看它是否主要在等待光盘、网络IO或其他东西,更新统计将其缩短到59秒。我的问题已由执行计划更新。很好,您现在比最初发布的时间1:38节省了40秒。您可以从dbo.OutgoingEmails中选择count(*)并公布显示计数所用的时间吗?SQL Server中没有重组表。有一个index reorganize命令,但如果刚刚重建了索引,则运行该命令毫无意义。同样地,重建索引将更新索引上的统计信息,而这些信息对于没有WHERE子句的完整表扫描也不会有用。。任何性能改进都可能是因为它们将页面带到缓存中,因此查询不必从缓存中读取它们disc@MartinSmithArtur:在SQL Server中重新组织索引时,统计信息不会更新。这两篇来自微软的文章都是关于重新组织和更新统计数据的好读物。重建索引时,索引将被更新。他们说他们已经重建了索引